프로그래머스 코딩테스트를 풀면서 알게된 부분 정리
다른 사람 풀이를 참고하여 작성함
arr.find(callbackFn, thisArg)
에서 thisArg 부분이 callbackFn 보다 먼저 실행됨const solution = (p, c) =>
p.find(
name => !c[name]--,
c.map(name => c[name] = (c[name]|0)+1)
)
// 내림차순
arr.sort((a, b) => a - b)
// 오름차순
arr.sort((a, b) => b - a)
function solution(array, commands) {
return commands.map(c => {
const [ s, e, idx ] = c
const newArr = array.slice(s-1, e).sort((a,b) => Number(a)-Number(b))
return newArr[idx-1]
})
}
function solution(numbers) {
var answer = numbers.map(v => v + '')
.sort((a, b) => (b+a)*1 - (a+b)*1)
.join('');
return answer[0] === '0' ? '0' : answer;
}
function solution(genres, plays) {
const genreDic = genres.reduce((p, c, i) => {
p[c] = (p[c] | 0) + plays[i]
return p
}, {})
const cntType = {}
return genres
.map((g, i) => {
return { type: g, cnt: plays[i], idx: i}
})
.sort((a, b) => {
if(a.type != b.type) return genreDic[b.type] - genreDic[a.type]
if(a.cnt != b.cnt) return b.cnt - a.cnt
return a.idx - b.idx
})
.filter(t => {
if(cntType[t.type] == 2) return false
cntType[t.type] = (cntType[t.type] | 0) + 1
return true
})
.map(t => t.idx)
}
const array1 = [5, 12, 8, 130, 44];
array1.findIndex((element) => element > 13) // 3
const obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
const solution = (clothes) => {
const cntPerCloth = Object.values(
clothes.reduce((obj, t) => {
obj[t[1]] = (obj[t[1]] | 0) + 1;
return obj;
} , {})
)
const ways = cntPerCloth.reduce((p, c) => p*(c+1), 1)
return ways - 1;
}
function solution(bridge_length, weight, truck_weights) {
let sec = 0
const qu = [{position: 0, weight: 0}]
let weightOnBridge = 0
while(true) {
if(truck_weights.length === 0) {
sec += bridge_length
break;
}
if(qu[0].position === sec) {
const truck = qu.shift()
weightOnBridge -= truck.weight
}
if(weightOnBridge + truck_weights[0] <= weight) {
const newTruckWeight = truck_weights.shift()
weightOnBridge += newTruckWeight
qu.push({ position: bridge_length + sec, weight: newTruckWeight })
} else {
// 다음 트럭이 못 올라오는 상황이면 얼른 큐의
// 첫번째 트럭이 빠지도록 그 시간으로 점프한다.
// * 참고: if 밖에서 1 더하기 때문에 -1 해줌
if (qu[0]) sec = qu[0].position - 1;
}
sec++
}
return sec
}
스택 (Stack)
- LIFO(Last In First Out)
- 데이터를 집어넣는 push, 데이터를 추출하는 pop
- 맨 나중에 집어넣은 데이터를 확인하는 peek
(4).toString(2); // '100'