728x90
프로그래머스 알고리즘 고득점 Kit의 hash 문제인 '완주하지 못한 선수'를 Java로 풀어보았다.
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
우선 Hash 문제 Kit인 만큼 먼저 HashMap을 이용해서 풀어보았다. 사실 map에서 굳이 element를 삭제하지 않고 한번 더 반복문을 실행해서 value가 0이 아닌 요소를 찾아도 되지만, 굳이 한 번 더 반복문을 쓸 필요는 없을 것 같아서, remove를 하는 선택을 했다. 하지만 remove를 한다고 하더라도, 인덱스로 접근할 수 없는 HashMap의 특성상 iterator를 이용하여 첫 번째 element, 즉 하나 남은 유일한 element의 key값을 반환해주어야 했다.
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
for (String p : participant)
map.put(p, map.getOrDefault(p, 0)+1);
for (String p : completion) {
if (map.get(p) == 1) map.remove(p);
else map.put(p, map.get(p)-1);
}
return map.entrySet().iterator().next().getKey();
}
}
풀면서 정렬로 푸는 게 더 편하겠다는 생각도 들어서 그렇게도 접근해서 한 번 풀어보았다. participant와 completion을 둘 다 정렬해두고, 다른 요소를 발견하면 바로 리턴하고, 끝까지 찾지 못한다면 participant의 마지막 요소가 완주하지 못한 선수라는 의미이므로 이를 리턴해주면 된다. (completion의 요소의 개수가 하나 적기 때문)
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
int len = completion.length;
for (int i = 0; i < len; i++) {
if (!participant[i].equals(completion[i]))
return participant[i];
}
return participant[len];
}
}
728x90
'기초 공부 (언어 및 알고리즘) > 알고리즘 (Java)' 카테고리의 다른 글
[프로그래머스/Java] 기능개발(스택/큐) 풀이 (1) | 2025.03.06 |
---|---|
[프로그래머스/Java] 같은 숫자는 싫어(스택/큐) 풀이 (0) | 2025.03.06 |
[프로그래머스/Java] 베스트앨범(Hash 문제) 풀이 (0) | 2025.03.04 |
[프로그래머스/Java] 전화번호 목록(hash 문제) 풀이 (0) | 2025.03.04 |
[프로그래머스/Java] 폰켄몬(Hash 문제) 풀이 (0) | 2025.03.04 |