본문 바로가기

코딩테스트/백준

[백준-자바] 10546번 배부른 마라토너 / 2022.07.04

 

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

 

10546번: 배부른 마라토너

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

www.acmicpc.net

 

 

import java.util.*;


public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        // 참가자와 완주자 배열 생성
        String [] participant = new String[N]; 
        String [] completion = new String[N-1];
        for(int i=0; i<N; i++){
            participant[i] = sc.next();
        }
        for(int i=0; i<N-1; i++){
            completion[i] = sc.next();
        }
        String answer = ""; // 답 
        HashMap<String, Integer> map = new HashMap<>(); // HashMap 생성
        for(int i=0; i<participant.length; i++){
            //이미 있는 이름의 키값이라면 해당 value 값에 + 1 
            //없는 이름의 키값이라면 value값에 1 저장
            map.put(participant[i], map.get(participant[i])==null?1:map.get(participant[i])+1);
        }
        //완주자 배열과 비교
        for(int i=0; i<completion.length; i++){
        //완주자 이름이 hashmap에 포함되어있으면 해당 value값 - 1
            if(map.containsKey(completion[i]))
                map.replace(completion[i],  map.get(completion[i])-1);
        }
		//value값이 0이 아닌 key값 출력	
        for(String key : map.keySet()){
            if(map.get(key)!=0){
                answer = key;
                System.out.println(answer);
                return;
            }
        }


    }
}

 

왜인지는 모르겠으나 참가자와 완주자의 이름을 배열에 저장하지 않고 바로 hashmap에 저장, 비교 했을때보다 배열에 저장했을때가 메모리도 덜 차지하고 속도도 더 빨랐다.