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

[백준]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);
            }
        }
    }
}

 

 

반응형