* 주의! 비전공자의 내 맘대로 식 풀이입니다. 잘못된 점이나 조언이 있다면 댓글로 가르쳐주시면 잘 배우겠습니다! ^^
첫 번째 방법: 정렬하여 풀기
접근 방법
가. [참가자] 명단과 [완주자] 명단을 오름차순으로 정렬한다.
나. 순서대로 한 명씩 비교하면서 달라졌을 때, 그 [참가자]의 이름을 출력한다.
내 생각과 느낌
가. 생각하기 쉬우면서도 심플한 방법인 것 같다.
나. 다양한 정렬 방법을 배울 수 있는 기회였다.
다. 비효율적인 정렬 방법은 시간 초과로 통과하지 못한다.
라. Array.prototype.sort() 메서드를 사용하면 쉽다.(각종 메서드를 잘 알고 활용하는 것이 중요!)
마. 배열(길이: n)의 정렬 + 배열(길이: n-1)의 정렬 + 배열(길이: n) 길이만큼의 반복
코드 예시
function solution(participant, completion) {
participant.sort();
completion.sort();
for (let i = 0; i < participant.length; i++) {
if(participant[i] !== completion[i]) return participant[i];
}
}
결과
정확성 테스트
테스트 1 〉 | 통과 (0.06ms, 30.3MB) |
테스트 2 〉 | 통과 (0.10ms, 30.1MB) |
테스트 3 〉 | 통과 (0.30ms, 30.1MB) |
테스트 4 〉 | 통과 (0.61ms, 30.2MB) |
테스트 5 〉 | 통과 (0.58ms, 30.3MB) |
효율성 테스트
테스트 1 〉 | 통과 (43.55ms, 41.3MB) |
테스트 2 〉 | 통과 (100.84ms, 47.5MB) |
테스트 3 〉 | 통과 (119.93ms, 52.1MB) |
테스트 4 〉 | 통과 (131.63ms, 55.1MB) |
테스트 5 〉 | 통과 (106.71ms, 53.6MB) |
두 번째 방법: 객체를 활용하여 풀기
접근 방법
가. {선수} 빈 객체를 만든다.
나. {선수} 객체에 [참가자] 이름의 key가 있는지 보고 없으면 value를 1로 만들고, 있으면 value에 +1을 한다.
다. {선수} 객체에 [완주자] 이름의 key가 있는지 보고 value가 1이면 속성을 삭제, 1보다 크면 value를 -1 한다.
라. {선수} 객체에 남아있는 속성의 key를 출력한다.
내 생각과 느낌
가. [참가자] 배열과, [완주자] 배열을 한 번씩만 돌면서 확인하면 되므로 효율적인 방법인 것 같다.
나. Object 클래스에는 Array 클래스와 다르게 속성을 제거하는 메서드가 없다.
다. 대신 delete 연산자를 이용하여 속성을 제거한다.
라. 객체에서 key만 배열로 만들어주는 Object.keys() 메서드와 value만 배열로 만들어주는 Object.values() 메서드가 있다.(주의할 점은 static mathod라는 점!)
마. 놀랍게도 Object.entries() 메서드로 key와 value를 모두 Array 형태로 바꿔줄 수 있다.
바. 더 놀랍게도 key, value 쌍의 배열을 객체로 바꿔주는 Object.fromEntries() 메서드도 있다.
사. 해보진 않았지만 standard built-in object인 Map을 이용하여 똑같이 해결할 수도 있을 것 같다.
코드 예시
function solution(participant, completion) {
const players = {};
for (const player of participant) {
!players[player] ? players[player] = 1 : players[player]++;
}
for (const player of completion) {
players[player] === 1 ? delete players[player] : players[player]--;
}
return Object.keys(players)[0];
}
결과
정확성 테스트
테스트 1 〉 | 통과 (0.09ms, 30MB) |
테스트 2 〉 | 통과 (0.22ms, 30.1MB) |
테스트 3 〉 | 통과 (0.40ms, 29.8MB) |
테스트 4 〉 | 통과 (0.55ms, 30.2MB) |
테스트 5 〉 | 통과 (0.36ms, 30.1MB) |
효율성 테스트
테스트 1 〉 | 통과 (51.18ms, 50.5MB) |
테스트 2 〉 | 통과 (55.29ms, 56.1MB) |
테스트 3 〉 | 통과 (52.79ms, 60.8MB) |
테스트 4 〉 | 통과 (91.96ms, 68.1MB) |
테스트 5 〉 | 통과 (94.12ms, 68MB) |