https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 접근 방법
1. 참가자들의 이름과 등장횟수를 해쉬맵에 담아준다.
2. 완주자들을 순회하며 해쉬맵에서 등장횟수 - 1을 해준다.
3. 마지막으로 해쉬맵의 value값을 순회할 때 0이 아닌 값이 있다면, 해당 Key를 리턴해준다.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, Integer> map = new HashMap<>();
for(String p : participant) {
map.put(p, map.getOrDefault(p, 0) + 1);
}
for(String c : completion) {
if (map.containsKey(c)) {
map.put(c, map.get(c) - 1);
}
}
for(String key : map.keySet()) {
if (map.get(key) != 0) {
return key;
}
}
return answer;
}
}
문제 풀이 회고
처음에 잘못된 방향으로 생각하다보니 시간 소모를 많이 했다. 처음 로직은 일단 각 배열들을 sorting하고, String.join을 이용해서 String 형태로 각 배열의 차이점을 볼 수 있게 해줬다.
그리고, 완주자 배열을 순회하면서 참가자와 이름이 다르다면, 동명 이인이라는 것 이므로 그 이름을 리턴하도록 해주었다. 그 이외의 경우에는 동명이인이 없으므로 참가자의 마지막 선수를 리턴하도록 해줬다.
문제에서 주어진 예제는 통과했지만, 제출하니 전부 틀려서 고민하다가 갑자기 등장횟수를 저장하는 방향이 떠올라서 쉽게 풀었던 문제였다.
'Algorithm > 프로그래머스 코딩테스트 문제풀이전략' 카테고리의 다른 글
[프로그래머스] Lv.2 괄호 회전하기 (0) | 2024.05.14 |
---|---|
[프로그래머스] Lv.2 올바른 괄호 (0) | 2024.05.14 |
[프로그래머스] Lv.1 없는 숫자 더하기 (0) | 2024.05.05 |
[프로그래머스] Lv.0 A로 B 만들기 (0) | 2024.05.05 |
[프로그래머스] Lv.0 중복된 문자 제거 (0) | 2024.05.05 |