한 걸음씩 기록하며
[프로그래머스 코딩테스트] 완주하지 못한 선수 본문
[완주하지 못한 선수]
문제 설명 :
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
⛏제한 조건
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
📁 입출력 예시
👉🏻 답안
function solution(participant, completion) {
let answer = "";
let a = participant.sort(); // sort로 유니코드(default) 순으로 문자열 정렬
let b = completion.sort();
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) { // for문으로 하나씩 대조
return a[i]; // 대조해서 없으면 참가자 이름 리턴
}
}
}
📑 간단한 설명
sort로 문자열 정렬해서 배열 따로 만들고, for문으로 하나씩 불러오며 대조하는 방식을 택했다.
사실 if 문 안에 sort를 바로 넣었었는데, 런타임 오류가 나서 sort를 위로 뺐다.
지금까지 풀면서 가장 다른 사람들의 답안(함수 사용)이 궁금한 문제였다
💪🏻 공부하면 좋을 답안
function solution(participant, completion) {
const map = new Map(); // map 객체 생성
for(let i = 0; i < participant.length; i++) {
let a = participant[i],
b = completion[i];
map.set(a, (map.get(a) || 0) + 1); // map.set(key, value) 형태로 선언
map.set(b, (map.get(b) || 0) - 1); // key에 a
} // value에 (map.get(a) || 0) + 1)
for(let [k, v] of map) { // for of로
if(v > 0) return k; // value > 0 면 return key
}
return 'nothing';
}
- map 객체 ([['key1', 'value1'], ['key2', 'value2]])
- set 객체 { }
- map.set(a, map.get(a) || 0 ) + 1);
- -> map을 set형태로 선언 : ([['key1', 'value1'], ['key2', 'value2]]) -> { 'key1', 'value1', 'key2', 'value2'}
- -> key는 a, b : 참가자와 완주자 그대로 넣음
- -> (map.get(a) || 0) +1 : 1) map에 a가 있는지 확인, 2) 있으면 1, 없으면 0, 3) 그 후에 +1을 하여 value로 보냄
- -> 그러면 참가자에 명단이 없으면 value가 1, 명단이 있으면(동명이인) value가 2가 됨
- map.set(a, map.get(a) || 0 ) + 1);
- -> 동일한 패턴으로 진행되고, 1) map에 b가 있으면 1, 없으면 0 2) 그 후에 -1을 더하여 value로 보냄
- -> 그러면 완주자 명단이 없으면 value가 -1, 명단이 있으면 value가 0이 됨
- for문이 끝나면, 미완주자는 1, 완주자는 0임
- 그러면 for of를 돌려서 value가 0이상인 인덱스의 key를 선언.
*map, set 객체 참고할 블로그
https://velog.io/@dolarge/Java-Script-Set-%EA%B3%BC-Map
'알고리즘 & 코딩테스트' 카테고리의 다른 글
[프로그래머스 코딩테스트] 자릿수 더하기 (0) | 2022.01.18 |
---|---|
[프로그래머스 코딩테스트] 이상한 문자 만들기 (0) | 2022.01.18 |
[프로그래머스 코딩테스트] 수박수박수? (0) | 2022.01.17 |
[프로그래머스 코딩테스트] 서울에서 김서방 찾기 (0) | 2022.01.16 |
[프로그래머스 코딩테스트] 문자열 다루기 기본 (0) | 2022.01.16 |
Comments