세 가지 방법 정도로 풀어보았는데 세 풀이 모두 정확도 테스트는 통과하였지만 효율성 테스트를 통과하지 못했다.
첫번째 풀이 방법. 이중 for문을 사용해서 완주자 명단에 있는 사람을 한 명씩 잘라내는 방식을 사용하였다.
function solution(participant, completion) {
for(i=0;i<completion.length; i++) {
for(j=0; j<participant.length; j++){
if(completion[i]===participant[j]) {
participant.splice(j,1);
break;
}
}
}
var answer = participant[0]
return answer;
}
정확성 테스트를 통과하였지만 효율성 테스트를 통과하지 못했다. for문을 두번이나 써서 효율성이 떨어진다고 생각해서 다른 방법을 생각해보았다.
2-1. 이번에는 for문을 한번만 쓰는 대신 if문을 사용해서 완주자 명단에 참여자가 있는지 확인하는 방식으로 진행하였다.
function solution(participant, completion) {
var completionString = JSON.stringify(completion);
for(i=0; i<participant.length;i++) {
if (!completionString.includes(participant[i])) {
var answer= participant[i];
break;
}
}
return answer;
}
-> 정확도 테스트에서 fail 하였다. 동명이인이 있을 때 undefined가 반환되어 실패함을 확인하였다.
2-2. 동명이인이 존재하는 경우를 고려하여 코드를 수정하였다. 마찬가지로 정확도 테스트는 통과하였으나, 효율성 테스트 Fail 😢
function solution(participant, completion) {
var completionString = JSON.stringify(completion);
for(i=0; i<participant.length;i++) {
if (completionString.includes(`"${participant[i]}"`)) {
completionString=completionString.replace(`"${participant[i]}"`,"-");
}
else {
var answer= participant[i];
break;
}
}
return answer;
}
3. if문을 사용하지 않으면 좀 더 나아질까 해서 for문만 사용하는 방식으로 머리를 좀 더 써봤다. 하지만 여전히 정확도 테스트는 통과하나, 효율성 테스트 Fail 😢
function solution(participant, completion) {
let participantString = JSON.stringify(participant);
for(i=0; i<completion.length;i++) {
participantString = participantString.replace(`"${completion[i]}"`,`""`);
}
var newParticipant= JSON.parse(participantString).sort();
var answer = newParticipant[newParticipant.length-1]
return answer;
}
배열의 수를 줄일 수 있는 코드를 추가해봤지만 역시나 효율성테스틀 통과하지 못했다.
function solution(participant, completion) {
let diff = JSON.stringify(participant).length - JSON.stringify(completion).length-3;
let newParticipant = participant.filter(person => person.length=diff) ;
var completionString = JSON.stringify(completion);
for(i=0; i<newParticipant.length;i++) {
if (completionString.includes(`"${newParticipant[i]}"`)) {
completionString=completionString.replace(`"${newParticipant[i]}"`,"-");
}
else {
var answer= newParticipant[i];
break;
}
}
return answer;
}
3시간동안 머리를 싸매보았으나 아직 알고리즘 쪼렙으로서 효율성을 줄일 수 있는 방법이 뭐가 있을지 해결하지 못했다. 우선 정확도 테스트를 통과한 것에 감사하며 자료구조를 좀더 배워본 후 다시한번 돌아와서 풀어보기로 결심...
오늘은 여기까지 ^ㅠ^
반응형
'Algorithm > 문제 풀이' 카테고리의 다른 글
프로그래머스 Lv.1 소수 만들기 (0) | 2022.03.24 |
---|
댓글