알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!
이 문제는 참가자(participant) 이름이 담긴 배열과, 완주자(completion) 이름이 담긴 배열을 비교하여
참가자 중 완주하지 못한 선수 이름을 찾아내는 문제이다.
(제한사항 : completion의 길이는 participant의 길이보다 1 작습니다.)
import java.util.HashMap;
public class Solution {
static String solution(String[] participant, String[] completion) {
String answer ="";
HashMap<String, Integer> map = new HashMap<>();
for(String player : participant) {
map.put(player, map.getOrDefault(player, 0) + 1);
}
for(String player : completion) {
map.put(player, map.get(player) - 1);
}
for(String key : map.keySet()) {
if(map.get(key) != 0) {
answer = key;
}
}
return answer;
}
}
completion의 길이는 participant의 길이보다 1 작습니다.
= 완주하지 못한 사람은 늘 1명 뿐이다.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
for(int i=0;i<completion.length;i++){
if(!participant[i].equals(completion[i])){
return participant[i];
}
}
return participant[participant.length-1];
}
}
평소 코테 문제를 풀 때 제한사항 부분을 자세히 보지 않아서
종종 메모리 초과 같은 에러를 만나기도 했는데..앞으로는 그런 이유가 아니라도 제한사항을 꼼꼼히 봐보아야겠다.
문제에 새로운 방식으로 접근할 수 있는 좋은 방법인 것 같다.
위 풀이의 경우 반복문에 앞서 정렬 과정을 갖기 때문에 속도는 비교적 느리다.
주어지는 데이터 수가 많이지면 많아질수록 속도가 더 느려지겠지만ㅜ
새로운 접근방식이 신기했다!
정렬을 이용한 풀이를 다음에 꼭 써보아야겠다!