할머니의 콤퓨타 도전기
Javascript로 프로그래머스 해시 문제 풀기 본문
javascript로 알고리즘 문제를 풀어보기로했다.
아직 잘 안써봐서 까막눈급이다 ....
그래서 프로그래머스 코딩테스트 고득점 kit 중 풀어봤던 걸 다시 javascript로 짜보려한다.
오늘은 해시 문제를 풀어보았다.
1. 완주하지 못한 선수 (Level 1)
https://programmers.co.kr/learn/courses/30/lessons/42576
- 풀이 설명
- 완주하지 못한 사람은 한명이다.
- 따라서 participant와 completion을 오름차순으로 정렬한다.
- 두 배열을 비교하면서 같지 않을 때의 participant 원소가 완주하지 못한 사람이다.
- 코드 구현
- javascript에서 정렬은 배열.sort()로 하는구나
function solution(participant, completion) {
participant.sort();
completion.sort();
for(let i=0; i<participant.length; i++){
if(completion[i] !== participant[i])
return participant[i];
}
}
2. 위장 (Level 2)
https://programmers.co.kr/learn/courses/30/lessons/42578
- 풀이 설명
- 경우의 수 문제다.
- 각 의상 종류별 개수 + 1만큼 다 곱해주면 된다.
- 의상 종류가 상의 : 2벌, 하의 : 3벌이라면 가능한 조합은 (2+1)*(3+1)-1 = 11
- 1 빼주는 이유는 아무것도 안입은 경우를 제외해야하기 때문이다.
- 의상 종류가 상의 : 2벌, 하의 : 3벌이라면 가능한 조합은 (2+1)*(3+1)-1 = 11
- 코드 구현
- c++이였다면 for문을 썼겠지만 여기서는 forEach를 썼다.
- index나 조건식 등이 필요없어서 좋은 거서 같다. callback 함수로 기능을 수행한다.
- 하지만 continue나 break로 반복을 제어할 수 없다. 무조건 끝까지 반복
- obj[e[1]] = (obj[e[1]] || 1) + 1 부분은 다른 분이 푼 코드보고 괜찮아보여서 써보았다.
- 이렇게 쓰면 if문으로 초기화여부를 확인해줄 필요가 없이 한줄로 가능하다.
function solution(clothes) {
let obj = {};
let answer = 1;
clothes.forEach((e)=>{
obj[e[1]] = (obj[e[1]] || 1) + 1;
})
for(let key in obj)
answer *= obj[key]
return answer-1;
}
3. 베스트앨범 (Level 3)
https://programmers.co.kr/learn/courses/30/lessons/42579
- 풀이 설명
- 열심히 정렬하면 된당.
- c++로는 푼 적이 있는데 자바스크립트스럽게(?) 어떻게 푸나 해서 아래의 블로그를 참고했다.
- 코드 구현
- 내림차순 정렬은 배열. sort((a, b) => { return b-a; })로 하는구나
- Object.values(obj)
- 지정된 객체의 열거 가능한 속성 값을 포함하는 배열을 반환한다.
- https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/values
- reduce()를 이용해서 풀 수 있다.
- 아래의 reference에 잘 설명되어있었다. javascript에는 유용한 함수들이 많은 것 같아서 나중에 따로 정리해보는게 좋을 것 같다.
- https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
function solution(genres, plays) {
const genresList = genres.reduce((acc, cur, idx) => {
if(!acc[cur]){
acc[cur] ={
total: 0,
list: [],
}
}
acc[cur].total += plays[idx];
acc[cur].list.push([idx, plays[idx]]);
return acc;
}, {});
const sortGenresList = Object.values(genresList).sort((a,b) => {
return b.total - a.total;
}
);
const answer = sortGenresList.reduce((acc, genre) => {
genre.list.sort((a, b) => {
return b[1] - a[1];
});
acc.push(genre.list[0][0]);
if(genre.list.length > 1)
acc.push(genre.list[1][0]);
return acc;
}, []);
return answer;
}
'Algorithm > Problem Solving' 카테고리의 다른 글
Javascript로 프로그래머스 스택/큐 문제 풀기 (0) | 2021.06.25 |
---|---|
Python으로 백준 16987번을 풀어보자 (0) | 2021.06.23 |
Programmers: 신규 아이디 추천 (0) | 2021.04.29 |
Programmers: 추석 트래픽 (0) | 2021.04.28 |
Programmers: 크레인 인형뽑기 게임 (0) | 2021.04.27 |
Comments