CODING TEST
프로그래머스 - 완주하지 못한 선수
우진하다
2023. 5. 16. 17:01
나의 풀이.
첫번째 참여자 배열에서 HashMap.put 하는데 getOrDefault 메서드로 key가 있으면 + 1 없으면 0 으로 해주고
두번째 완주자 배열에서 HashMap.put 할 때 key 가 있으면 해당 value에서 - 1 해주기
그럼 완주하지 못한 애는 value가 1이니 조건문을 통해 answer에 key 할당해주면 OK...?
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> map = new HashMap<>();
for (String p : participant) {
map.put(p, map.getOrDefault(p, 0) + 1);
}
for (String c : completion) {
map.put(c, map.get(c) - 1);
}
for (String key : map.keySet()) {
if (map.get(key) > 0) {
answer = key;
break;
}
}
return answer;
}
}
효율성이 낮은건가... 해서 배열을 오름차순으로 정렬하고
배열 인덱스 요소를 비교하고
마지막에 모든 인덱스 요소가 동일하다면 동명이인이 있으므로
참가자의 마지막 인덱스 요소를 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 (!participant[i].equals(completion[i])) {
answer = participant[i];
break;
}
}
if (answer.equals("")) {
answer = participant[participant.length - 1];
}
return answer;
}
}
반복문을 사용해서 시간은 더 걸린거 같고
정확성과 효율성 높일 수 있는 방법이 뭔지 궁금하네..
끗!
문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/42576