코드
각 이름을 비교해서 같으면 배열에서 삭제하는 방법
function solution(participant, completion) {
for (let i = 0; i < participant.length; i++) {
for (let j = 0; j < completion.length; j++) {
if (participant[i] === completion[j]) {
participant.splice(i, 1);
completion.splice(j, 1);
i--;
j--;
break;
}
}
}
return participant[0];
}
이 코드는 시간복잡도 O(N^2)인데 정확성 통과는 했지만 효율성에서 막혔다
수정 코드
완주자을 순회하면서 완주자의 이름을 참가자에서 찾아서 삭제
function solution(participant, completion) {
for (let i = 0; i < completion.length; i++) {
if (participant.indexOf(completion[i]) !== -1) {
participant.splice(participant.indexOf(completion[i]), 1);
}
}
return participant[0];
}
더 빠를 줄 알았는데 idexOf 자체가 결국은 순회해야해서 아까와 같은 O(N^2)이다.
역시 통과 못함
통과 코드
오름차순후 비교
function solution(participant, completion) {
participant = participant.sort();
completion = completion.sort();
for (let i = 0; i < completion.length; i++) {
if (participant[i] !== completion[i]) return participant[i];
}
return participant[participant.length - 1];
}
문제를 잘 읽어보면 통과하지 못한 사람이 1명으로 명시되어있으므로
두 배열을 오름차순을 한후에 같은 index를 비교하다가 다르다면 그 사람이 완주 못한 선수
완주자 끝까지 다 똑같다면 참여자의 마지막이 완주 못한 선수이다
'코딩 테스트 > 프로그래머스 level1' 카테고리의 다른 글
키패드 누르기 (0) | 2022.08.11 |
---|---|
실패율 (0) | 2022.08.11 |
소수 만들기 (0) | 2022.08.06 |
음양 더하기 (0) | 2022.08.06 |
숫자 문자열과 영단어 (0) | 2022.04.28 |