https://programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
첫번째 풀이
function solution(participant, completion) {
completion.forEach((racer) => {
var idx = participant.indexOf(racer);
participant.splice(idx, 1);
});
var answer = participant[0];
return answer;
}
시간 초과가 떠서 틀렸다.
두번째 풀이
function reducer(arr) {
var result = arr.reduce((counter, racer) => {
counter[racer] = (counter[racer] || 0) + 1;
return counter;
}, {});
return result;
}
function solution(participant, completion) {
var obj_participant = reducer(participant);
var obj_completion = reducer(completion);
var answer = "";
Object.entries(obj_participant).map(
([participant_name, participant_count]) => {
if (!obj_completion[participant_name]) {
answer = participant_name;
} else if (obj_completion[participant_name] !== participant_count) {
answer = participant_name;
}
}
);
return answer;
}
- 객체 형태로 변환해서 key 와 value 값을 비교해줘야 할 것 같아서
reducer 함수를 따로 만든 뒤에, 그 reducer 함수로 만든 참가자 객체와 완주자 객체를 각각 비교했다.
- 다른 풀이를 볼 때마다 가장 먼저 드는 생각은 진짜 난 똥멍청인가 하는 것이다ㅋㅋ
복잡하게 생각하면 한도 끝도 없이 복잡해지는 것 같다.
왜 저렇게 단순 명료한 풀이법을 생각 못하나 싶다.
바보같이 사서 고생하는 풀이를 볼 때마다 자괴감 듦..ㅋㅋㅋ
세번째 풀이 (최종)
function solution(participant, completion) {
participant.sort();
completion.sort();
for (var i=0; i < participant.length; i++) {
if (participant[i] !== completion[i]){
return participant[i]
}
}
}
- sort 를 생각해내지 못했다. 먼저 두 배열 모두 정렬을 해주고 나서 차례로 비교하면 불일치하는 요소를 쉽게 알 수 있었는데 말이다.
'알고리즘' 카테고리의 다른 글
[프로그래머스/자바스크립트] 스택/큐_프린터 (0) | 2021.11.10 |
---|---|
[프로그래머스/자바스크립트] 스택/큐_기능개발 (0) | 2021.11.09 |
[프로그래머스/자바스크립트] 해시 - 베스트앨범 (0) | 2021.11.08 |
[프로그래머스/자바스크립트] 해시 - 위장 (0) | 2021.11.04 |
[백준] 9093_단어뒤집기 (0) | 2021.11.02 |
댓글