image

Silver Ⅳ 🔗1812. 사탕

📝문제 요약

문제 설명

N(3≤N≤999, N은 홀수)명의 학생들이 원 모양으로 둘러앉아 있다. 각 학생들은 모두 몇 개의 사탕(≤100,000)을 가지고 있는데 그 개수는 사람마다 다를 수 있고, 사탕을 아예 가지고 있지 않을 수도 있다. 물론 사탕의 개수는 음이 아닌 정수이다.

편의상 학생들에게 번호를 매기는데, 반시계 방향으로 1번 학생, 2번 학생, …, N번 학생으로 번호를 매겼다. 1번 학생 오른쪽엔 2번 학생, 2번 학생 오른쪽엔 3번 학생이 앉아 있는 것이고, 마지막 N번 학생 오른쪽엔 1번 학생이 앉아 있게 된다.

우리는 인접한 두 학생이 가지고 있는 사탕의 수의 합을 안다. 즉 1번 학생과 2번 학생이 가지고 있는 사탕의 수의 합, 2번 학생과 3번 학생이 가지고 있는 사탕의 수의 합, …, N-1번 학생과 N번 학생이 가지고 있는 사탕의 수의 합, 마지막으로 N번 학생과 1번 학생의 가지고 있는 사탕의 수의 합을 안다. 이때, 각 학생이 가지고 있는 사탕의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N(3 ≤ N ≤ 999, N은 홀수)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 1번 학생과 2번 학생이 가지고 있는 사탕의 수의 합, 2번 학생과 3번 학생이 가지고 있는 사탕의 수의 합, …, N-1번 학생과 N번 학생이 가지고 있는 사탕의 수의 합, 마지막으로 N번 학생과 1번 학생의 가지고 있는 사탕의 수의 합이 순서대로 주어진다.

출력

첫째 줄부터 N개의 줄에 걸쳐 1번 학생이 가지고 있는 사탕의 수, 2번 학생이 가지고 있는 사탕의 수, …, N번 학생이 가지고 있는 사탕의 수를 순서대로 출력한다. 출력하는 수는 음이 아닌 정수들이어야 하며, 항상 답이 존재하는 경우만이 입력으로 주어진다고 가정해도 좋다.


✏️문제 풀이

  • 학생의 인원 n을 입력
  • 두 학생이 가지고 있는 사탕의 수를 저장할 student 리스트 초기화
  • 각 학생이 가지고 있는 사탕의 개수를 저장할 candy 초기화
  • n번 반복하여 1번 학생이 가지고 있는 사탕의 수를 연산
    • student에 두 학생이 가지고 있는 사탕의 수를 추가
    • candy += student[i] * (-1) ** i 사탕의 수를 연산
  • 연산된 사탕의 수는 2 * 1번 학생의 사탕의 수 이므로 2를 나누어준 후 출력
  • 1번 학생은 구하였으므로 n-1번 반복하여 연산
    • 현재 합에서 이전 학생의 사탕 수를 뺌
    • 사탕 수를 출력

코드와 함께 보는 풀이

# 학생의 인원 수 n을 입력
n = int(input())

# 두 학생이 가지고 있는 사탕의 수를 저장할 student 리스트 초기화
student = []
# 학생이 가지고 있는 사탕의 개수를 저장할 candy 초기화
candy = 0

# 첫 번째 학생의 사탕 수를 구함
for i in range(n):
		# 두 학생이 가지고 있는 사탕의 수를 student 리스트에 추가
    student.append(int(input()))
    # 번갈아가면서 더하고 빼면서 1번 학생의 사탕의 개수를 연산
    candy += student[i] * (-1) ** i

# 첫 번째 학생의 사탕 수 출력
candy = candy // 2
print(candy)

# 나머지 학생들의 사탕 수를 구함
for i in range(n-1):
		# 현재 합에서 이전 학생의 사탕 수를 뺌
    candy = student[i] - candy
    # 각 학생의 사탕의 수 출력
    print(candy)


💯제출 코드

n = int(input())

student = []
candy = 0

for i in range(n):
    student.append(int(input()))
    candy += student[i] * (-1) ** i
candy = candy // 2
print(candy)

for i in range(n-1):
    candy = student[i] - candy
    print(candy)

댓글남기기