일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리스트 컴프리헨션
- project euler
- python
- mysql
- 2557
- enumerate
- flask
- Dictionary
- 네이밍
- SUM
- FOREIGN KEY
- SUM()
- 외래키
- datetime
- lower_case_table_names
- 세그먼트 트리
- floor
- 에라토스테네스의 체
- Codeforces
- timestamp
- 파이썬
- BOJ
- 자료구조
- 소수
- ceil
- 딕셔너리
- 큰 수 나누기
- list comprehension
- convention
- itertools
Archives
- Today
- Total
늒네 기록
[BOJ-JS] 12852번 - 1로 만들기 2 본문
12852번: 1로 만들기 2 (acmicpc.net)
역으로 추적해나가는 방식으로 푼다. 코드를 짧게 줄이기 위해 오브젝트를 사용했는데, 배열로 풀어도 아이디어는 같다. 나는 오브젝트의 키값에 만들고자 하는 숫자를, 아이템에 해당 숫자에 도달한 경로를 배열로 넣어두었다.
숫자 i를 만드는 방법은
- i가 2로 나뉠 경우 i/2를 만드는 경로에 i 추가.
- i가 3으로 나뉠 경우 i/3를 만드는 경로에 i 추가.
- i-1을 만드는 경로에 i 추가.
위의 셋이 있는데, 이 중 제일 짧은 경로를 아무거나 하나 택해서 i를 만드는 경로로 사용하면 된다.
위와 같은 방식으로 2, 3, ..., n을 만드는 경로를 전부 구하면 끝.
n=+require('fs').readFileSync(0)
d={1:[1]}
i=1
while(i++<=n){
a=[]
if(i%2==0)a.push(d[i/2])
if(i%3==0)a.push(d[i/3])
a.push(d[i-1])
x=a.sort((a,b)=>a.length-b.length)[0]
d[i]=[i,...x]
}
console.log(d[n].length-1)
console.log(...d[n])
반응형
'알골 공부 기록 > BOJ' 카테고리의 다른 글
[BOJ-JS] 5991번 - Papaya Jungle (0) | 2024.05.08 |
---|---|
[BOJ-JS] 17848번 - Flight Turbulence (0) | 2024.05.08 |
[BOJ-JS] 17204번 - 죽음의 게임 (0) | 2024.05.04 |
[BOJ-JS] 15886번 - 내 선물을 받아줘 2 (0) | 2024.05.03 |
[BOJ-JS] 11558번 - The Game of Death (1) | 2024.05.02 |
Comments