https://codeforces.com/contest/1516/problem/A
시간 1초, 메모리 256MB
input :
output :
조건 :
사전순으로 나타나려면 배열의 원소들을 각각 비교할 때 동일한 idx의 원소가 차이가 나야 하는 것이고 정답인 리스트의 경우에는 원래 리스트보다 더 작은 값이 앞에 존재 해야 한다.
예시로 3 1 4 가 들어 오면 2 1 5 가 이 입력 값보다 사전순으로 앞에 존재하는 것이다.
k
번 만큼 반복을 수행 해야 하고 배열의 길이 n
보다 커질 수 없다.
idx에 존재하는 값을 k
와 비교해 k
가 더 크다면 data[idx]
값을 0으로 만들고 k
를 업데이트 하고 그렇지 않은 경우에는 data[idx]
에서 k
를 빼고 k
를 0으로 업데이트 한다.
while문 조건에 유의 하도록 하자.
정답 코드들의 경우 그냥 n - 1 번째 원소를 계속 더하는데.. 조건에 100보다 작거나 같다라는 조건이 있어 이 경우도 예외처리가 필요하지 않을 까 하다.
import sys
t = int(sys.stdin.readline())
for i in range(t):
n, k = map(int, sys.stdin.readline().split())
data = list(map(int, sys.stdin.readline().split()))
idx = 0
while k > 0 and idx < n - 1:
if data[idx] < k:
data[n - 1] += data[idx]
k -= data[idx]
data[idx] = 0
else:
data[idx] -= k
data[n - 1] += k
k = 0
idx += 1
for item in data:
print(item, end=" ")
print()