IT/Algorithm

DP_1로 만들기_백준_1463

ahj990510 2025. 2. 20. 22:39

-문제-

 

-문제접근-

 

위 문제는 주어진 자연수 n을 1로 만들기 위해 필요한 최소 연산 횟수를 DP를 이용해 구하는 문제입니다.

 

아래의 조건이 중요하며 확실하게 인지를 해야 합니다.

 

  • 에서 1을 빼는 연산
  • n이 2로 나누어 떨어지면 2로 나누는 연산
  • n이 3으로 나누어 떨어지면 3으로 나누는 연산

 

d[1] =0 : 1은 이미 목표 값이기에 1을 1로 만드는데 필요한 연산 횟수는 0입니다.

 

1은 0번의 횟수를 갖기에 for문은 i를 2부터 n보다 작거나 같을 때로 잡아서 위의 조건을 적용시켜줍니다.

 

1번 조건

d[i] = d[i - 1] + 1; : 가장 기본적인 연산인 1을 빼는 것이며 i를 1로 만들기 위한 연산 횟수는 i-1을 1로 만드는 최소 횟수에 1을 더한 값입니다.

 

2번 조건

if (i % 2 == 0) d[i] = min(d[i], d[i / 2] + 1);

: 를 1로 만드는 최소 연산 횟수에 1(나누는 연산)을 더한 값과 기존의 d[i] 값 중 최솟값으로 갱신하여 줍니다.

 

3번 조건

if (i % 3 == 0) d[i] = min(d[i], d[i / 3] + 1);

: 을 1로 만드는 최소 연산 횟수에 1을 더한 값과 비교하여 최솟값으로 갱신합니다.

 

위 과정들을 통해 모든 i에 대해 1로 만드는 최소 연산 횟수가  d[i]에 갱신 되면서 저장됩니다.

 

-전체 코드-

 

 

-END-

'IT > Algorithm' 카테고리의 다른 글

01타일_DP_백준_1904  (0) 2025.02.23
동전 1_DP_백준_2293  (0) 2025.02.23
바이러스(DFS)_백준_2606  (0) 2025.02.17
공유기 설치_백준_2110  (0) 2025.02.17
트리순회_백준_1991  (0) 2025.02.17