문제 설명
각 자리마다 최댓값이 다른 숫자판을 가진 계수기가 있다. 버튼을 누를 때마다 가장 오른쪽 자리 숫자가 1씩 증가한다. 계수기에 표시되는 숫자의 초기 상태와 각 자리의 최댓값이 주어질 때, k번 버튼을 누른 뒤 계수기 각 자리에 표시되는 숫자를 구한다.
각 자리의 숫자가 표시할 수 있는 숫자가 최댓값보다 커지면 0으로 초기화하고 왼쪽 자리 숫자를 1 증가시킨다. 만약 가장 왼쪽 자리 숫자가 최댓값을 넘어간다면 왼쪽 자리가 없기 때문에 올림을 전파하지 않는다.
풀이
N = int(input())
max_value = list(map(int, input().split()))
present_value = list(map(int, input().split()))
K = int(input())
cnt = 0
while (cnt < K):
cnt += 1
index = N - 1
for i in range(N):
if present_value[index] == max_value[index]:
present_value[index] = 0
index -= 1
else:
break
if index == -1:
continue
present_value[index] += 1
print(*present_value, sep='')
계수기의 자리 수, 각 자리의 최댓값과 초기 값, 버튼 누르는 횟수를 입력받는다.
while문을 돌면서 cnt == k가 되는 순간 반복문을 종료한다.
반복문을 한번 돌 때마다 cnt는 +1을 해주고, 인덱스는 현재 가리키는 계수기의 자리를 의미하는데 초기에는 가장 오른쪽 자리를 가리킨다.
안쪽 반복문 for 내에서는 이번에 증가할 자리의 인덱스를 찾는다. 현재 인덱스가 가리키는 값이 최댓값인 경우 그 값은 0으로 바꾸고 인덱스는 왼쪽으로 이동시킨다. 현재값이 최댓값이 아닌 경우 for문을 나간다.
for문을 나간 뒤에는 현재 인덱스가 가리키는 값을 +1 한다.
while문을 나와서 present_value를 공백없이 출력하면 정답을 구할 수 있다.
(sep은 separation, 구분자를 의미한다.)
주의할 점은 가장 왼쪽 자리 숫자가 최댓값을 넘었을 경우 index는 -1이 되는데, 파이썬의 경우 배열[-1]은 가장 끝(오른쪽) 값을 가리키기 때문에 예외처리를 하지 않으면 정답과 다른 값이 출력된다. 따라서 이 부분은 예외처리를 했다.
'알고리즘 > 구름 edu' 카테고리의 다른 글
[구름LEVEL 유형 트레이닝 / 구현] 단풍나무 (python) (1) | 2024.06.16 |
---|---|
[구름LEVEL 유형 트레이닝 / 구현] 어려운 문제 (python) (0) | 2024.06.14 |
[구름LEVEL 유형 트레이닝 / 구현] 장마 (python) (1) | 2024.06.14 |
[구름LEVEL 유형 트레이닝 / 구현] 딱지놀이 (python) (0) | 2024.06.13 |
[구름LEVEL 유형 트레이닝 / 구현] 인공지능 청소기 (python) (0) | 2024.06.13 |