Backend
home
🏃🏻‍♂️

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

생성일
2025/03/05 08:12
태그
Programmers
게시일
2025/03/05
최종 편집 일시
2025/03/05 08:19

문제

해결 방안 고민

- 단 한 명의 선수 제외하고는 모든 선수가 마라톤 완주 - 참가자 배열 participant, 완주한 선수 배열 completion - 완주하지 못한 선수의 이름을 return 두 배열을 정렬해서 같지 않은 것을 추출 HashMap 순회 // 해시맵을 순회하면서 값이 0이 아닌 키(참가자 이름) 찾으면 됨 for (String key : hm.keySet()) { if (hm.get(key) != 0) { answer = key; } }
Markdown
복사

해결 방법

첫 번째 방법
두 배열을 정렬한다.
for 문을 통해 정렬된 두 배열을 앞에서부터 차례로 비교하여 다른 요소를 찾는다.
완주하지 못한 선수가 단 한 명 존재하므로, 끝까지 비교했는데 다른 요소가 없다면 participant 배열의 마지막 요소가 완주하지 못한 선수가 된다.
두 번째 방법
HashMap을 이용해 participant 배열의 각 이름의 등장 횟수를 카운팅한다.
participant 배열을 순회하면서 해시맵에서 해당 이름의 등장 횟수를 하나씩 줄여나간다.
HashMap에서 값이 0이 되지 않은 이름이 완주하지 못한 선수가 된다.

코드

배열 정렬 후 비교
package algo250305; import java.util.*; // 완주하지 못한 선수 - Lv1 public class Programmers42576 { public String solution(String[] participant, String[] completion) { String answer = ""; Arrays.sort(participant); Arrays.sort(completion); int length = completion.length; for (int i = 0; i < length; i++) { if (!participant[i].equals(completion[i])) { // 다른값인 경우 answer = participant[i]; return answer; } } answer = participant[participant.length - 1]; // 각 요소의 값이 일치한 경우 return answer; } }
Java
복사
HashMap을 사용
package algo250305; import java.util.HashMap; // 완주하지 못한 선수_2 - Lv1 public class Programmers42576_2 { public String solution(String[] participant, String[] completion) { String answer = ""; // 해시맵 선언 HashMap<String, Integer> map = new HashMap<>(); // participant 배열 순회하면서 각 참가자의 이름 해시맵에 저장 for (String p : participant) { map.put(p, map.getOrDefault(p, 0) + 1); } // completion 배열 순회하면서 각 완주자의 이름의 값을 해시맵에서 감소시킴 for (String c : completion) { map.put(c, map.get(c) - 1); } // 해시맵을 순회하면서 값이 0이 아닌 키(참가자 이름) 찾으면 됨 for (String key : map.keySet()) { if (map.get(key) != 0) { answer = key; } } return answer; } }
Java
복사