문제
스타트링크가 입주한 사무실은 방 번호를 직접 정할 수 있다. 방 번호를 정하려면 1층 문방구에서 파는 숫자를 구매해야 한다. 숫자를 구매하기 위해 준비한 금액은 M원이고, M원을 모두 사용해야 한다.
문방구에서 파는 숫자는 0부터 N-1까지이고, 각 숫자 i의 가격은 Pi이다. 문방구에서는 같은 숫자를 여러 개 구매할 수 있고, 문방구는 매우 많은 재고를 보유하고 있기 때문에, 항상 원하는 만큼 숫자를 구매할 수 있다. 방 번호가 0이 아니라면 0으로 시작할 수 없다.
예를 들어, N = 3, M = 21, P0 = 6, P1 = 7, P2 = 8이라면, 만들 수 있는 가장 큰 방 번호는 210이다. M원을 모두 사용해서 만들 수 있는 가장 큰 방 번호를 구해보자.
입력
첫째 줄에 N이 주아진다. 둘째 줄에는 공백으로 구분된 P0, ..., PN-1이 주어진다. 마지막 줄에는 M이 주어진다.
출력
첫째 줄에 M원을 사용해서 만들 수 있는 가장 큰 방 번호를 출력한다. 적어도 하나의 숫자를 살 수 있는 입력만 주어진다.
제한
- 1 ≤ N ≤ 10
- 1 ≤ P ≤ 50
- 1 ≤ M ≤ 50
- N, P, M은 정수
내 답안:
const fs = require('fs');
let num = fs.readFileSync("/dev/stdin").toString().trim().split("").map(Number);
let map = new Map() ;
for (let i = 0 ; i < 10 ; i++) map.set(i,0) ;
num.forEach( x => map.set(x, map.get(x)+1)) ;
map.set(6, (map.get(6)+ map.get(9))/2);
map.set(9 , map.get(6)) ;
map = Array.from([...map].sort((a,b) => b[1] - a[1] )) ;
console.log(Math.ceil(map[0][1])) ;
>> 6과 9는 같이 사용이 가능하기 때문에 (6의 갯수 + 9의 갯수)/2 하고, 이를 자연수로 낮춰줌
>> map이 아니고 arr(index를 key처럼 사용)해도 좋음
>> sort해서 index = 0 을 찾는 게 아니고 Math.min하면 더 깔끔할듯
'백준' 카테고리의 다른 글
[실버] 카우버거 (15720번) (0) | 2022.11.25 |
---|---|
[실버] 이장님 초대 (9237번) (0) | 2022.11.25 |
[실버] 달팽이는 올라가고 싶다 (2869번) (0) | 2022.11.25 |
[실버] 소수 찾기 (1978번) (0) | 2022.11.25 |
[브론즈] 이항 계수1 (11050번) (0) | 2022.11.24 |