문제 유형 : 해쉬, 정렬
https://school.programmers.co.kr/learn/courses/30/lessons/42576?language=javascript
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근법
두 배열에서 서로 다른 원소를 찾으면 된다.
[첫 번째 풀이]는 배열을 정렬해주고 다른 요소를 발견하면 return 시킨다
participant(참가자) 배열과 completion(완주자) 배열 모두 sort()를 이용해서 정렬시키자. 그리고 인덱스 0부터 두 배열을 비교하면 for문 한 번으로 문제를 해결할 수 있다. participant(참가자) 배열과 completion(완주자) 배열을 0번 부터 비교하다보면 participant(참가자) 배열에 비완주자(정답)가 나올 경우 두 배열 비교 연산은 불일치가 나올 것이고 그 때 participant(참가자) 배열의 요소를 출력하면 된다.
[두 번째 풀이] 해쉬 (or 객체) 를 이용해서 참가자 배열을 먼저 해쉬 세팅을 해주고 완주자를 빼준다
전체 코드
[ 첫 번째 풀이] 배열 정렬
function solution(participant, completion) {
// 두 배열을 문자열 정렬을 통해 다른 요소가 등장하면 종료시킨다
// 문자열 배열 방법을 익혀두자
// 첫 번째 정렬 방법 : sort 함수
participant.sort();
completion.sort()
// 두 번째 정렬 방법 : 오름차순
//participant.sort((a,b) => a > b ? 1 : -1);
//completion.sort((a,b) => a > b ? 1 : -1);
console.log(participant) // [ 'eden', 'kiki', 'leo' ]
console.log(completion) // [ 'eden', 'kiki' ]
for(let i = 0; i < participant.length; i++){
if(participant[i] !== completion[i]){
return participant[i]
}
}
}
[첫 번째 풀이] 확장성 고려하여 break문
function solution(participant, completion) {
var answer = '';
participant.sort();
completion.sort();
for(var i = 0 ; i < participant.length; i++){
if(participant[i] !== completion[i]){
answer = participant[i];
break;
}
}
return answer;
}
[두 번째 풀이] 객체 버전
function solution(participant, completion) {
let hashed = {}
// let hashed = new Map(); 동일한 결과
// 참가자
participant.forEach(entry => {
hashed[entry] = hashed[entry] ? hashed[entry] + 1 : 1
})
// 완주자
completion.forEach(entry => {
hashed[entry] = hashed[entry] - 1
})
for (var key in hashed) {
if (hashed[key] >= 1) return key
}
}
[두 번째 풀이] 객체 버전(2)
function solution(participant, completion) {
let hash = {}
// 참가자 더하기
participant.forEach((i) => {
// i(key) property가 있을 때, 없을 때
hash[i] = hash[i] ? ++hash[i] : 1;
// (주의) hash[i] = hash[i] ? hash[i]++ : 1; 삼항 연산자에서 ++ 주의하자 (오답)
})
//console.log(hash)
// 완주자 제외 => 남는 거 완주 못한 참가자
completion.forEach((j) => {
// comletion 은 participant에 포함되니 사람 이름 property가 없을 수가 없다
hash[j]--
})
// 2번째 로직에서 값을 없앤거지(0) property(사람 이름은) 계속 남아 있다
for(let key in hash){
if(hash[key] > 0) return key
}
}
'JavaScript > 알고리즘(JS)' 카테고리의 다른 글
[프로그래머스 레벨2] 위장 [Javascript/해쉬, 객체] (0) | 2023.03.04 |
---|---|
[프로그래머스 레벨1] 폰켓몬 [Javascript/해쉬] (0) | 2023.03.04 |
[프로그래머스 레벨3] 베스트 앨범 [Javascript/해쉬, 객체] (0) | 2023.03.04 |
[ALGO#07] 프로그래머스 레벨2 귤 고르기 [Javascript] (0) | 2023.03.01 |
[ALGO#06] 프로그래머스 레벨2 기능개발 [Javascript] (0) | 2023.02.28 |