챌린지 목록으로 돌아가기
보통 0명 해결 정답률 0%

숫자 빼기로 0 만들기

최소한의 자리수 빼기 연산으로 0에 도달하세요.

배우게 될 내용

  • 과정을 상태와 이동으로 모델링하기
  • 0까지의 최소 단계 계산하기
  • DP와 탐욕적 지름길 비교하기

문제

원문 보기 (영어)

각 단계마다 현재 숫자에 포함된 0이 아닌 십진수 한 자리를 선택하여 그 숫자를 뺍니다. 매 단계 후에는 새로운 값에서 자릿수를 선택합니다. 0에 도달하기 위해 필요한 최소 단계 수를 구하세요.

removing_digits(n)을 구현하세요.

입력

n: 양의 시작 숫자입니다.

출력

가장 적은 빼기 단계 수를 반환하세요.

제약 조건

1 ≤ n ≤ 1,000,000. 0을 빼는 것은 유효한 동작이 아니므로 제외됩니다.

예시

예시 1
입력:
n = 14

예상 출력:
expected = 3
입력:
long long n = 14;

예상 출력:
long long expected = 3;
입력:
long n = 14;

예상 출력:
long expected = 3;

설명

14 → 10 → 9 → 0은 세 단계가 필요합니다. 어떤 첫 번째 빼기 선택도 두 단계 만에 0에 도달할 수 없습니다.

예시 2
입력:
n = 7

예상 출력:
expected = 1
입력:
long long n = 7;

예상 출력:
long long expected = 1;
입력:
long n = 7;

예상 출력:
long expected = 1;

설명

유일한 자릿수 7을 빼면 바로 0이 됩니다.

접근 방법

먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.

힌트 1

각 수는 한 자리 숫자를 빼서 도달할 수 있는 더 작은 수들의 최적 답에 의존한다.

힌트 2

n까지의 모든 값에 대해 동적 계획법을 쓰면 중복 계산을 피할 수 있다.

힌트 3

뺄 수 있는 숫자는 매번 달라지고, 0은 절대 유효한 선택이 아니다.

예상 복잡도

시간 O(n * d), 추가 공간 O(n)

참고 자료

이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.