문제설명
더보기
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한조건
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
입출력 예
participant | completion | return |
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
문제풀이
for문을 이용한 풀이
1. 정렬을 한다.
2. 같은 index에 똑같은 값 유무 확인
3. 다르면 출력 / for문을 completion 기준으로 하기 때문에 미 완주자가 마지막에 있는 경우엔 체크를 못한다. 따라서 answer값이 "" 이면 particpant값의 마지막 값을 출력
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(participant);
Arrays.sort(completion);
for(String rep: participant){
System.out.println(rep);
};
for(String rep : completion){
System.out.println(rep);
}
for(int i=0; i< completion.length;i++){
if(!participant[i].equals(completion[i])){
System.out.println(participant[i] + " ㅋ미 완주 ~ ");
answer = participant[i];
break;
}
}
if (answer.equals("")){
int lastIndex = participant.length-1;
answer =participant[lastIndex];
}
System.out.println(answer);
return answer;
}
해시를 이용한 풀이(https://youtu.be/_2yD46UxSso)
해시를 이용한 영상이 있어서 남긴다. for문도 좋지만 해시를 이용해서 푸는 방법도 공부를 해야겠다.
1. hash 만들기 -> key에 선수의 이름을, value의 count를 갖는 Hash Map을 만든다.
2. hash 빼기 -> completion에 존재하는 선수들의 hash를 뺀다.
3. 마지막주자 -> value가 남아있는 선수가 완주하지 못한 선수이다.
public String solution(String[] participant, String[] completion) {
String answer = "";
//1. hash map을 만든다. (participant)
HashMap<String , Integer> map = new HashMap<>();
for(String player : participant)
map.put(player, map.getOrDefault(player,0)+1);
System.out.println(map);
//2. hash map을 뺀다 (completion)
for(String player : completion){
map.put(player, map.get(player)-1);
}
//3. value가 0이 아닌 마지막 주자를 찾는다.
for(String key : map.keySet()){
if (map.get(key) != 0) {
answer = key;
break;
}
}
System.out.println(answer);
return answer;
}
'Etc. > Coding Test' 카테고리의 다른 글
[백준] 11720번 숫자의 합 (0) | 2022.05.08 |
---|---|
[프로그래머스] 부족한 금액 계산하기 (0) | 2022.05.03 |
[프로그래머스] 수박수박수박 풀이/해설 (3) | 2022.04.30 |
[프로그래머스] 로또의 최고 순위와 최저 순위 풀이/해설 (0) | 2022.04.29 |
[백준] BaekJoon 4673 셀프 넘버 (0) | 2022.04.01 |