새소식

반응형
250x250
Programmers/Lv.1

프로그래머스 - 완주하지 못한 선수

  • -
728x90
반응형

 

이번 문제는 map의 getOrDefault()를 잘 활용하면 쉽게 풀 수 있는 문제였다.

 

  • 참가자 배열 처리 : 먼저 모든 참가자의 이름을 map에 키값으로 저장한다. 이 때 이미 있는 참가자의 경우 값을 (등장횟수)를 1 증가시킨다.
for(String runner : participant) {
    runners.put(runner, runners.getOrDefault(runner, 0) + 1);
}
  • 완주자 배열 처리 : 참가자 배열 처리와 마찬가지로 진행한다.
for(String complete : completion) {
    completes.put(complete, completes.getOrDefault(complete, 0) + 1);
}
  • 미완주자 식별 : 참가자와 완주자를 처리해준 map에서 똑같은 키 값으로 가져온 값을 비교한다. 
    이 때 참가자의 값보다 완주자의 값이 작을 때에 그 키 값의 이름을 가진 사람이 완주하지 못하는 사람이다.
for(Map.Entry<String, Integer> entry : runners.entrySet()) {
    String key = entry.getKey();
    int count1 = entry.getValue();
    int count2 = completes.getOrDefault(key, 0);
    if(count1 > count2) {
        answer = key;
        break;  // 찾으면 루프 종료
    }
}

 

이렇게 진행하는 이유는 동명이인이 존재했을 때 map에 그냥 값을 넣게 되면 덮어씌워지기 때문에 등장횟수를 값으로
설정을 한 후에 진행을 해야한다.

아래는 전체 코드이다.

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map<String, Integer> runners = new HashMap<>();
        Map<String, Integer> completes = new HashMap<>();
        
        for(String runner : participant) {
            runners.put(runner, runners.getOrDefault(runner, 0) + 1);
        }
        for(String complete : completion) {
            completes.put(complete, completes.getOrDefault(complete, 0) + 1);
        }
        for(Map.Entry<String, Integer> entry : runners.entrySet()) {
            String key = entry.getKey();
            int count1 = entry.getValue();
            int count2 = completes.getOrDefault(key, 0);
            if(count1 > count2) {
                answer = key;
            }
        }
        return answer;
    }
}
728x90
반응형

'Programmers > Lv.1' 카테고리의 다른 글

프로그래머스 - 체육복  (0) 2024.04.23
프로그래머스 - 이웃한 칸  (0) 2024.04.04
프로그래머스 - 햄버거 만들기  (0) 2024.04.04
프로그래머스 - 숫자 짝꿍  (0) 2024.04.04
프로그래머스 - 둘만의 암호  (0) 2024.04.04
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.