https://programmers.co.kr/learn/courses/30/lessons/42576?language=javascript
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
function solution(participant, completion) {
for (let j = 0; j < completion.length; j++) {
if (participant.indexOf(completion[j] !== -1)) {
participant.splice(participant.indexOf(completion[j]),1)
}
}
var answer = participant[0];
return answer;
}
처음 작성한 코드는 정확성은 통과 했는데 효율성을 통과하지 못했다. 그도 그럴게 배열의 길이가 100,000인데 일일히 하나씩 대조해가면서 확인하니 최악의 경우 연산을 약99억번 (100,000 * 999,999) 해야하니 시간이 오래 걸릴만 하다.
그래서 각 배열의 원소의 출현횟수를 객체로 저장해두고 출현횟수만 기록하여 비교하는 방식으로 코드를 써서 연산횟수를 줄였다. 이 경우 최대 40만번의 연산으로 수행이 가능하다.
function solution(participant, completion) {
const participantCount = {};
for (let j = 0; j < participant.length; j++) {
(participantCount[participant[j]] !== undefined) ? participantCount[participant[j]] += 1 : participantCount[participant[j]] = 1;
}
for (let i = 0; i < completion.length; i++) {
participantCount[completion[i]] -= 1;
}
var answer = Object.keys(participantCount).find(element => participantCount[element] === 1);
return answer;
}
근데 다른사람들 풀이를 보니까 그냥 sort() 시켜서 두 문자열 사이에서 차이가 나오는 부분을 바로 리턴하는게 더 간편할거 같다. 나는 의미 없이 객체를 하나더 만든 꼴이다.
function solution(participant, completion) {
participant.sort();
completion.sort();
for(let i in participant) {
if(participant[i] !== completion[i]) return participant[i];
}
}
'코딩테스트' 카테고리의 다른 글
(JS) 프로그래머스 - K번째수, 같은 숫자는 싫어,P Y 갯수, 하샤드 수 (0) | 2021.05.25 |
---|---|
개발공부 기록 시작 (0) | 2020.11.02 |
댓글