문제설명
더보기
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
[제한사항]
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.
✔ 문제를 보고싶으신 분은 더보기를 눌러주세요!
풀이
내가 이해한대로 문제를 요약해보자면,
📌마라톤에 참여한 선수 전체의 이름이 담긴 배열 participant
📌마라톤에 참여하여 완주한 선수의 이름이 담긴 배열 completion
📌완주하지못한 선수의 이름을 return (동명이인이 존재할 수 있다)
이다. 완주한 선수의 이름이 담긴 배열이 마라톤에 참여한 전체 선수의 배열보다 크기가 1이 작다는 걸 봐서 모두가 완주하는 상황은 없는 것 같다^_^....
어떻게 문제를 풀까 고민하다.. HashMap과 삼항연산자가 생각나서 써보기로 했다. 삼항연산자 때문에 효율성 측면에서 안 좋지않을까 했는데 다행히 채점결과는 정확성: 50.0/효율성: 50.0으로 합계 100점이었다!
제출 후 다른 사람의 풀이를 보는데... 깔끔하고 getOrDefault에 대해 배울 수 있는 좋은 코드가 있어서 가지고 왔다👍🏻
<내 풀이>
import java.util.Stack;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hsParticipant = new HashMap<>();
for(String part : participant) {
hsParticipant.put(part, (hsParticipant.containsKey(part)? hsParticipant.get(part)+1 : 1 ));
}
// .containsKeys(key)는 Hashmap의 키 값이 존재하는 지 확인해준다. 존재하면 true, 없으면 false
for(int i=0; i<completion.length; i++) {
if(hsParticipant.containsKey(completion[i])) {
hsParticipant.put(completion[i], hsParticipant.get(completion[i]) - 1);
}
}
for(int i=0; i<participant.length; i++) {
if(hsParticipant.get(participant[i])>0) {
answer = participant[i];
break;
}
}
return answer;
}
}
<다른 사람의 풀이>
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hm = new HashMap<>();
for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
for (String player : completion) hm.put(player, hm.get(player) - 1);
// .getOrDefault를 사용한 이유는 HashMap의 put은 key가 존재하면 value를 새로운 값으로 바꿔주는데
// 이걸 사용하므로써 중복체크하여 1이 아닌 2가 들어가게 된다
for (String key : hm.keySet()) {
if (hm.get(key) != 0){
answer = key;
break; // 풀이엔 없었지만 넣으면 좋을 거 같아서 추가해봄
}
}
return answer;
}
}
직장동료와 코테스터디처럼 했던 코코만모에서
풀었던 문제😀 !
'Coding Test' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 - Java (0) | 2022.07.24 |
---|---|
[프로그래머스] 내적 - Java (0) | 2022.07.24 |
[프로그래머스] 없는 숫자 더하기 - Java (0) | 2022.07.24 |
[프로그래머스] 문자열 내 p와 y의 개수 - Java (0) | 2022.03.18 |
[프로그래머스] 크레인 인형뽑기 게임 - Java (1) | 2022.03.07 |