문제
문제가 길어서 문제 링크를 남긴다.
https://programmers.co.kr/learn/courses/30/lessons/12980
코딩테스트 연습 - 점프와 순간 이동
OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈
programmers.co.kr
풀이 코드
public int solution(int n) { //점프와 순간이동
int ans = 0;
while(n>0){ //자세한 풀이는 블로그에 기재
ans += n%2;
n = n/2;
}
return ans;
}
이 문제를 읽어보면 n = (A x 2) + B꼴로 나타내면 A+B가 최소 건전지 사용량이 되는데
대신 여기서 A가 또 a x 2 + b꼴로 나타내어지면 최소건전지 사용량은 a+b+B가 된다.
이런 식으로 A가 a x 2 + b꼴로 안나타내어질 때까지 계속 나누어서 그때의 나왔던 B값들과 마지막에 나오는 A값을
더해주면 최소 건전지 사용량이 된다.
그래서 ans += n%2; -> 이 부분으로 B값들의 값을 구하고 n = n/2; 으로 A를 a x 2 + b꼴로 안될 때까지 계속 나누어준다.
이 문제는 의외로 풀이코드가 간단한데 다른 사람들은 뭔가 if문을 써서 비교적 복잡하게 나타냈길래 한번 내가 푼 방식을 써봤다.
'프로그래머스 > Level 2' 카테고리의 다른 글
| [프로그래머스][Level2][Java] 튜플 (0) | 2022.04.14 |
|---|---|
| [프로그래머스][Level2][Java] 짝지어 제거하기 (0) | 2022.04.14 |
| [프로그래머스][Level2][Java] 영어 끝말잇기 (0) | 2022.04.04 |
| [프로그래머스][Level2][Java] n^2배열 자르기 (0) | 2022.04.04 |
| [프로그래머스][Level2][Java] 스킬트리 (0) | 2022.04.01 |