코딩테스트

TIL - 프로그래머스 연습문제 : 완수하지 못한 선수

유기린 2022. 8. 7. 15:35

https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

참여자 중에 한 명만 완주를 못하고 다른 사람들은 완주를 한다.

이중에 완주하지 못한 한사람의 이름을 출력해야한다.

 

'js 배열 비교'검색했더니 

 JSON.stringify를 통해 문자열로 변경해 준 뒤 비교하는 방법을 찾았다.

 

https://soft91.tistory.com/84

 

[Javascript] 두 배열의 대한 비교 방법

[Javascript] 두 배열의 대한 비교 방법 실무에서나 알고리즘의 대한 공부를 할 때 두 배열의 대한 비교나 교집합(Intersection), 차집합(Difference)은 정말 많이 사용되는 것 같다. 특히 알고리즘을 풀

soft91.tistory.com

여기서 필요한건 차집합

// 배열 선언
const arr1 = ['1','2','3','4','5'];
const arr2 = ['1','2'];

// 차집합(Difference)
console.log(arr1.filter(x => !arr2.includes(x)));

출처: https://soft91.tistory.com/84 [너와 나의 프로그래밍:티스토리]

 

.

var participant = ['leo', 'kiki', 'eden'];
var completion = ['eden', 'kiki']

console.log(participant.filter(x => !completion.includes(x)));

//['leo']

원하는 값이 잘나왔다. 근데 console.log를 return으로 바꿔서 프로그래머스에 넣으면 안된다

다른방식도 찾아봤다

 

다른분들 답안을 참조하여 .sort() 이용하여 같은 순서로 배열하고 비교해서 다른값을 찾는방식을 찾았다.

var s_par = participant.sort();
var s_com = completion.sort();

// console.log(s_par, s_com)		//배열이 같나 확인+
for (let i = 0; i < s_par.length + 1; i++) {
  if (s_par[i] == !s_com[i]) {
    console.log(s_par[i]);
  }
}

콘솔에 true만 엄청나게 찍힌다????

 

ㄴ프로그래머스 답안용으로 수정 하고

틀린 ==! 를 !==로 변경

변수 answer로 인해 이중으로 ' "leo" ' 들어가고 굳이 필요없어서 삭제

//완성

function solution(participant, completion) {

    var s_par = participant.sort();
    var s_com = completion.sort();
    
    for (let i = 0; i < s_par.length + 1; i++) {
        if (s_par[i] !== s_com[i]) {
        return(s_par[i]);
     }
    }
}

 

* 정리노트

.sort() :  기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따라 정렬하여 재배열

 

==는 '값'만 비교하고, ===는 '타입'까지 비교합니다.

!== / !=== 도 마찬가지