1 분 소요

사용 언어: Python3

문제

백준 10539

스크린샷 2023-03-10 오후 3 23 16

이 문제는 평균을 보고 원래 값을 다시 복원하는 문제이다.
평균이라는게 모든 원소의 합원소의 수로 나누어 계산하는 것이므로,
반대로 평균 * 원소의 수 - 나를 제외한 나머지 원소의 합 으로 구할 수 있다.

(나는 아래처럼 예시를 이용해 계산식을 세웠지만 머리로 하는게 빠를 것 같기도 하다..)

# A 수열로부터 B 수열을 도출하기
A = 4, 3, 7, 10
B = 4/1, (4+3)/2, (4+3+7)/3, (4+3+7+10)/4

# B 수열로부터 A 수열을 도출하기
B = 4, 3, 7, 10
A = 4, 3(=b의두번째원소)*(2=자리수)-4(=a의첫번째원소), 7(=b의세번째원소)*(3=자리수)-(4+2(=a의두번째원소)), 10(=b의네번째원소)*(4=자리수)-(4+2+15(=a의세번째원소))

# B 수열의 특정 자리 값으로 A 수열의 특정 자리 값을 도출하기
# B : (4+3+7+10)/4 로부터 A : 10 를 도출하는 방법?
B값 * (4=자리수) - (4+3+7) = 10(A값)

코드

내 풀이

n, lst_B = int(input()), list(map(int, input().split()))

lst_A = []
lst_A.append(lst_B[0])

if len(lst_B) > 1:
  for i in range(1, len(lst_B)):
    lst_A.append(lst_B[i]*(i+1) - sum(lst_A[:i])) # i 인덱스 이전까지 원소의 합

for x in lst_A:
  print(x, end=" ") # 출력 형태 맞추기!

다른 풀이

N, lst_B = int(input()), list(map(int, input().split()))

lst_A = [0 for i in range(N)] # 나중에 append 하는 것보다 미리 선언하는게 수가 많아졌을 때 더 빠름
lst_A[0] = lst_B[0]

# 평균을 다시 복원하는 문제
for i in range(1, N): # range(1,1)이어도 에러가 발생하지 않기 때문에 조건문(if N > 1: ~)이 필요 없다
  lst_A[i] = lst_B[i] * (i+1) - sum(lst_A) # 현재 lst_A에 채워져 있는 것까지의 합

for x in lst_A:
  print(x, end=" ")


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기