문제
프로그래머스 [완주하지 못한 선수]
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42576
해결 방법
- Arrays.sort를 통해 두 배열을 정렬
- 이름이 순서대로 정렬되므로 같은 이름이 같은 위치에 놓이게 됩니다.
- for 문을 사용하여 참가자 배열과 완주자 배열을 하나씩 비교하고 비교 중 다른 이름이 그 이름을 반환
- 만약 completion 배열과 모두 일치한다면, participant 배열의 마지막 사람을 반환
코드
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
// 1. 참가자와 완주자 배열을 정렬
Arrays.sort(participant);
Arrays.sort(completion);
// 2. 정렬된 배열을 순차적으로 비교하여 다른 이름을 찾기
for (int i = 0; i < completion.length; i++) {
if (!participant[i].equals(completion[i])) {
return participant[i];
}
}
// 3. 만약 모두 일치하면 마지막 참가자가 완주하지 못한 사람임
return participant[participant.length - 1];
}
}
- 참고할 다른 풀이 방법
더보기
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hm = new HashMap<>();
for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
for (String player : completion) hm.put(player, hm.get(player) - 1);
for (String key : hm.keySet()) {
if (hm.get(key) != 0){
answer = key;
}
}
return answer;
}
}
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Long> participantMap = Arrays.asList(participant).stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
for(String name : completion) {
Long value = participantMap.get(name) - 1L;
if(value == 0L) {
participantMap.remove(name);
} else {
participantMap.put(name, value);
}
}
return participantMap.keySet().iterator().next();
}
}
'개발 공부 > 코딩테스트' 카테고리의 다른 글
99클럽 코테 스터디 15일차 TIL - 스택/큐 (0) | 2024.11.11 |
---|---|
99클럽 코테 스터디 12일차 TIL - 스택 (0) | 2024.11.08 |
99클럽 코테 스터디 10일차 TIL - 해시 (1) | 2024.11.06 |
99클럽 코테 스터디 9일차 TIL - 문자열, 해시 (0) | 2024.11.05 |
99클럽 코테 스터디 8일차 TIL - 해시 (0) | 2024.11.05 |