어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고
합니다. 단, 두번째 연산은 N이 K로 나누어 떨어질 때만 선택할 수 있습니다.
N에서 1을 뺍니다.
N을 K로 나눕니다.
예를 들어 N이 17, K가 4라고 가정합시다. 이 때 1번의 과정을 한 번 수행하면 N은 16이 됩니다.
이후에 2번의 과정을 두번 수행하면 N은 1이 됩니다. 결과적으로 이 경우 전체 과정을 실행한
횟수는 3이 됩니다. 이는 N을 1로 만드는 최소 횟수입니다.
N과 K가 주어질 때 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는
최소 횟수를 구하는 프로그램을 작성하세요.
<입력 조건>
N(2<=N<=100,000) , K(2<=K=100,000), N>=K
<입력 예시>
25
<출력 예시>
2
input = [25,3]
let N = input[0]
let K = input[1]
let count = 0;
while(N>1){
if(N%K===0){
N /= K
}else N-=1
count+=1
}
console.log(count)
역시 동일한 힌트가 존재한다. 1번 혹은 2번 과정을 수행하는 최소 횟수는
1을 빼는 것보다 N을 나누는 것이 수가 무조건 더 작아진다.
N은 1보다 큰 수인 2부터 시작되기 때문이다.
힌트는 곧, 1을 빼는 것보다 큰 수로 나누는 것을 반복하는 것을 먼저 실행하는 것이다.
그래서 나누어 떨어지면 나누고, 그렇지 않으면 1을 빼는 작업을 반복하며,
반복할 때마다 카운트에 값을 누적했다.
728x90
'개발 > 자료구조 | 알고리즘 공부' 카테고리의 다른 글
[다이나믹 프로그래밍] LCS, LCSS 란? 그리면서 이해하기 - 1 (0) | 2023.05.05 |
---|---|
[완전탐색 문제풀이] 시각 (0) | 2023.05.04 |
[2019 국가 교육기관 코딩 테스트 | 그리디 문제풀이] 큰 수의 법칙 (0) | 2023.05.03 |
[알고리즘 공부] 배열 내 덧셈 근삿값 경우의 수 (0) | 2023.05.01 |
[알고리즘 공부]자바스크립트 10진법에서 1~9의 다른 진법으로 바꾸기 (0) | 2023.04.30 |