반응형
문제
민겸이는 1 빼기를 할 수 있는 능력을 가지고 있다. 1 빼기란, 다음의 두 연산 중 하나를 골라 수행하는 것이다.
- 가지고 있는 수에서 1을 뺀다.
- 가지고 있는 수에 있는 1을 하나 지운다. 지우고 난 뒤 좌우의 수들을 순서대로 다시 합쳐 하나의 수로 만든다. 이때 맨 앞의 연속되는 0은 지워진다.
민겸이가 최초로 가지고 있는 정수가 하나 주어질 때, 이 수를 0으로 만들기 위해 최소 몇 번의 1 빼기가 필요한지 구해보자.
입력
민겸이가 가지고 있는 정수 N이 주어진다.
출력
민겸이가 해당 수를 0으로 만들기 위해서 최소 몇 번의 1 빼기가 필요한지 출력한다.
제한
- 1 ≤ N ≤ 109
예제 입력 1105
|
예제 출력 16
|
105 → 5 → 4 → 3 → 2 → 1 → 0의 과정으로 1 빼기를 진행할 경우 6번만으로 수를 0으로 만들 수 있다. 6번보다 적은 1 빼기로 수를 0으로 만드는 방법은 없다.
예제 입력 2506
|
예제 출력 220
|
예제 입력 31000000000
|
예제 출력 31
|
풀이
1을 빼는 것보다 지우는 것이 무조건 최선의 방법이다.
따라서 1이 존재하면 1을 지우도록 하고, 1이 없을 경우에 1을 뺀다.
n, ans = int(input()), 0
while n:
s = str(n)
ans += s.count("1")
n = int("0" + s.replace("1",""))
if n:
n-=1
ans+=1
print(ans)
반응형
'알고리즘 연습 > 그리디 알고리즘' 카테고리의 다른 글
[🥇5 / 백준 12904 / 파이썬] A와 B (2) | 2023.10.30 |
---|---|
[Lv.2 / 프로그래머스 / 파이썬] 광물 캐기 (0) | 2023.04.07 |
[🥈3 / 백준 1448 / 파이썬] 삼각형 만들기 (0) | 2022.06.23 |
[🥈4 / 백준 1343 / 파이썬] 폴리오미노 (0) | 2022.06.01 |
[🥈4 / 백준 2847 / 파이썬] 게임을 만든 동준이 (0) | 2022.02.14 |