알고리즘/구현 & 그리디 & 브루트포스

[백준]JAVA - 10546번: 배부른 마라토너

K.두부 2022. 9. 8. 16:35
반응형

https://www.acmicpc.net/problem/10546

 

10546번: 배부른 마라토너

마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명

www.acmicpc.net

풀이

Map을 이용해서 풀었더니 처음엔 출력 초과가 발생했다. 이유는 동명이인이였다. 

동명이인 문제를 해결하기 위해서 참가 선수 이름을 입력해줄 때 Map에 이미 들어있는 이름이라면 value 값을 1 추가해줬다.

for (int i=0; i<n; i++) {
String person = sc.next();
if (hm.containsKey(person)) {
hm.put(person, hm.get(person)+1);
} else {
hm.put(person, 1);
}
}

이후에 완주한 선수들의 value 값을 1씩 더해주면 된다. 그렇다면 완주한 사람의 value 값은 짝수가 되기때문에 value 값이 홀수인 인원을 출력하면 된다.

for (String p : hm.keySet()) {
if (hm.get(p) % 2 == 1) {
System.out.println(p);
}
}

 

<최종코드>

package TT;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Map<String, Integer> hm = new HashMap<>();
for (int i=0; i<n; i++) {
String person = sc.next();
if (hm.containsKey(person)) {
hm.put(person, hm.get(person)+1);
} else {
hm.put(person, 1);
}
}
for (int i=0; i<n-1; i++) {
String winner = sc.next();
hm.put(winner, hm.get(winner)+1);
}
for (String p : hm.keySet()) {
if (hm.get(p) % 2 == 1) {
System.out.println(p);
}
}
}
}

 

 

반응형