스택/큐
🥕프린터
const array = [1, 2, 3, 4, 5];
console.log(array.some((element) => element % 2 === 0));
- map함수를 통해 객체 형태로 만들 수도 있다.
let list = priorities.map((v, i)=> ({
my: i === location,
val: v
}));
다리를 지나는 트럭
완전 탐색
카펫
해시
완주하지 못한 선수
function solution(participant, completion) {
let sH=new Map();
for(let x of participant){
if(sH.has(x)) sH.set(x, sH.get(x)+1);
else sH.set(x, 1);
}
for(let x of completion){
sH.set(x, sH.get(x)-1);
}
for(let [key, val] of sH){
if(sH.get(key)===1) return key;
}
}
Map()
객체: 맵 객체를 생성한다. 맵 객체는 key:value의 쌍으로 이루어져있다.
- map객체로 for문을 돌 때는,
for(let [key, val] of map)
과 같이 도는 것을 기억하자!
위장
function solution(clothes) {
let answer=0;
let map=new Map();
for(let i=0; i<clothes.length; i++){
if(map.has(clothes[i][1])) map.set(clothes[i][1], map.get(clothes[i][1])+1);
else map.set(clothes[i][1], 1);
}
let tmp=1;
for(let [key, val] of map){
tmp*=(val+1);
}
answer=tmp-1;
return answer;
}
- 조합 잘 생각하기! 상의2벌, 하의1벌이라고 생각했을 때 2x1을 하게 되면 상하의가 각각 무조건 하나씩 들어간다. 하지만 만약에 상의or하의 둘 중 하나만 들어가는 경우도 고려하려면 (2+1)x(1+1)을 해줘야한다. 하지만 이렇게 연산하면 둘다 들어가지 않는경우도 고려하는 것이기 때문에 -1을 해준다. 즉, 상의 2벌과 하의1벌인데 상의나 하의 중 하나만 들어갈 수 있는 조합의 수는 (2+1)x(1+1)-1=5이다.
정렬
가장 큰 수
function solution(numberes) {
let answer='';
numberes=numberes.map((v)=>v+'').sort((a, b)=>(b+a)-(a+b)).join('');
numberes[0]==='0' ? answer += '0' : answer=numberes;
return answer;
}
- 숫자+문자=문자 (
3+''='3'
)
- 문자+문자=문자 (
'10'+'20'='1020'
)
- sort()는 양수일때 자리를 바꾸고, 음수일때는 제자리에, 0일때는 나머지의 자리를 바꾼다.
🥕DFS
타겟 넘버
function solution(numbers, target) {
let answer = 0;
function DFS(v, t){
if(v===numbers.length){
if(t===target) answer++;
}
else{
DFS(v+1, t-numbers[v]);
DFS(v+1, t+numbers[v]);
}
}
DFS(0, 0);
return answer;
}
- t-=numbers[v]와 같이 작성하면 안됨! t자체를 바꾸는 것이 아니라, 저 단계에서 빼주고 더해야함
- else문에서 for문 사용x