티스토리 뷰
문제링크
( https://school.programmers.co.kr/learn/courses/30/lessons/12980 )
1. 풀이 힌트
- 순간이동을 최대한 많이 해야하므로 n에서 2를 나눈다.
- 나누어 떨어지지 않는다면 점프를 해야하는 구간이므로 answer을 카운트 한다.
- 몫이 0이 되면 카운트한 answer을 출력한다.
2. 코드 풀이
function solution(n) {
let answer = 0;
while(n > 0) {
if(n % 2 === 0) {
n /= 2;
} else {
n--;
answer++;
}
}
return answer;
}
3. 회고
- 처음에는 0부터 세는 방식으로 접근했다. 각 step에서 점프와 순간이동을 호출하는 재귀 함수를 구현했다. 결과는 시간초과. 각 step의 최소 시간을 저장하는 DP 방식으로 시간을 좀 줄였지만 그래도 시간 초과가 났다. 좀 더 고민하다가 다른 사람 풀이를 봤는데 답은 생각보다 간단했다... 키포인트는 n번째 부터 내려가는 방식으로 생각하는 방법인 것 같다.
- 좀 더 깔끔하게 푼 사람들은 이진법으로 변환한 뒤 1의 숫자를 세는 방식으로 풀었다. (그런 생각을 해내는게 대단하다)
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 배달 (Javascript) (0) | 2022.01.26 |
---|---|
[프로그래머스] 타겟넘버 (Javascript) (0) | 2021.11.05 |
[프로그래머스] 다리를 지나는 트럭 (Javascript) (0) | 2021.09.20 |
[프로그래머스] 프린터 (Javascript) (0) | 2021.09.20 |
댓글
최근에 올라온 글
최근에 달린 댓글
TAG
- 20200428
- chapter7
- 20200413
- 생활코딩리눅스
- 20200403
- 20200417
- 20200425
- 20200504
- 20200317
- 20200330
- 20200624
- 20200512
- 20200622
- 20200503
- 20200319
- 20200415
- 20200804
- 20200424
- 20200510
- 20200421
- 20200427
- 백준
- 20200420
- 20200406
- 20200502
- 20200423
- chapter8
- 20200429
- likelion
- 20201204
- Total
- Today
- Yesterday