일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- datetime
- timestamp
- 리스트 컴프리헨션
- SUM
- python
- 세그먼트 트리
- FOREIGN KEY
- 딕셔너리
- 자료구조
- 파이썬
- lower_case_table_names
- 2557
- BOJ
- 소수
- 외래키
- 네이밍
- 에라토스테네스의 체
- Codeforces
- list comprehension
- floor
- SUM()
- convention
- project euler
- Dictionary
- enumerate
- 큰 수 나누기
- flask
- ceil
- itertools
- mysql
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