첫번째 줄에는 두개의 정수 n(1≤n≤10^5)과 k(1≤k≤10^18)가 공백을 기준으로 입력된다. 두번재 줄에는 n개의 정수 ai (−10^9≤ai≤10^9)가 공백을 기준으로 입력된다.
출력
k번 연산 결과 n개의 ai를 공백을 기준으로 출력한다.
입력예시
2 1
-100 100
출력 예시
200 0
풀이
우선 생각해 볼 수 있는 방법은 brute force일 것이다. 따라서 그 코드는 다음이 된다 :
n, k = map(int, input().split())
a_lst = list(map(int, input().split()))
for _ in range(k) :
a_max = max(a_lst)
a_lst = [a_max - x for x in a_lst]
print(*a_lst)
당연히 틀렸다. 반복횟수 k는 최대 10^18까지 될 수 있으므로, 시간 초과가 난다. 따라서 규칙성을 생각해보아야 한다.
n, k = map(int, input().split())
a_lst = list(map(int, input().split()))
a_min, a_max = min(a_lst), max(a_lst)
if k % 2 != 0 :
print(*[ a_max - x for x in a_lst])
else :
print(*[ x - a_min for x in a_lst])