프로그래머스(해시) 완주하지 못한 선수
입력으로 주어진 배열은 참석자/ 완주자 이고 이중 완주하지 못한 선수를 추출하는 문제입니다.
처음에 해결 방식으로는 이름을 KEY로 해시맵에 해당 이름의 참석자 수를 저장 한 후에 완주자 이름으로 해시맵에서 참석 자 수를 꺼내 카운트를 줄이는 방식으로 진행했습니다.
해시방식
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, Integer> participantMap = new HashMap<>();
for(String name : participant) {
participantMap.put(name, participantMap.getOrDefault(name, 0) + 1);
}
for (String name : completion) {
int count = participantMap.getOrDefault(name, 0) - 1;
if (count == 0) {
participantMap.remove(name);
} else {
participantMap.put(name, count);
}
}
for(String key : participantMap.keySet()) {
answer = key;
}
return answer;
}
}
정렬방식
다른 방향으로 생각해보면 한명의 참석자만 없기때문에 참석자, 완주자를 정렬 한 후에 서로 비교해 가다가 참석자와 완주자가 다른 경우가 바로 완주하지 못한 참석자라는 것으로 바로 추출할 수 있다는 것을 알수 있습니다.
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(participant);
Arrays.sort(completion);
for (int i = 0; i < completion.length; i++) {
if (!completion[i].equals(participant[i])) {
return participant[i];
}
}
return participant[participant.length - 1];
}
}
코드는 더 간단해 진것으로 보이나 두개다 정렬해야 해서 비용이 더 들수도 있다고 생각되네요.
'정리 > 알고리즘' 카테고리의 다른 글
해시 - 베스트앨범 (0) | 2022.02.04 |
---|---|
스택/큐 - 프린터 (0) | 2022.02.03 |
스택/큐 - 기능개발 (0) | 2022.02.03 |
해시 - 위장 (0) | 2022.02.03 |
해시 -전화번호목록 (0) | 2022.02.03 |
댓글