CCC 2018 stage 1, junior 3번 문제인 are we there yet? 입니다.
본 포스트는 이해를 돕기 위해 문제를 간략하게만 정리하였으므로 상세 내용과 코드 제출은 아래 링크를 참고해 주세요.
CCC '18 J3 - Are we there yet? - DMOJ: Modern Online Judge
You decide to go for a very long drive on a very straight road. Along this road are five cities. As you travel, you record the distance between each pair of consecutive cities.
dmoj.ca
문제 개요 설명
아주 긴 직선으로 된 도로 위에 5개의 마을이 위치해 있습니다. 우리는 이 5개의 마을들을 차례대로 방문하면서, 해당 마을이 다른 마을들과 얼마나 멀리 떨어져 있는지를 알아보려 합니다.
입력으로는 연속된 두 개의 마을 사이의 거리들이 숫자로 주어집니다. 이것을 이용해 각각의 마을을 방문했을 때, 다른 마을들과의 거리를 알아내도록 하는 솔루션을 작성해 주세요.
입력
- 4개의 숫자가 공백으로 구분되어 입력됩니다. 이 각각의 숫자들은 모두 1000보다 작습니다.
- 해당 숫자들은 연속된 마을과 마을 사이의 거리를 나타냅니다.
- 예를 들면, 첫 번째로 입력된 숫자는 1번과 2번 마을 사이 거리를 나타내고, 두 번째로 입력된 숫자는 2번과 3번 마을 사이 거리를 나타내는 식입니다.
출력
- 5개의 마을에서 거리를 측정하므로 총 5줄의 출력이 필요합니다.
- 각 줄은 i번 마을과 다른 마을들과의 거리를 나타내는 5개의 숫자로 이루어져야 합니다.
- 이때, 자기 자신과의 거리도 출력에 포함해야 합니다.
- 각 줄을 이루는 5개의 숫자는 공백으로 구분됩니다.
입출력 예시
입력 :
3 10 12 5
출력 :
0 3 13 25 30
3 0 10 22 27
13 10 0 12 17
25 22 12 0 5
30 27 17 5 0
출력 조건에 따라서 첫 번째 줄은 1번 마을과 다른 마을들과의 거리를 계산해야 합니다.
0 : 1번마을과 1번마을 사이의 거리는 0입니다.
3 : 1번마을과 2번마을 사이의 거리는 3입니다.
13 : 1번마을과 3번마을 사이의 거리는 13입니다. (1번과 2번마을의 거리 3 + 2번과 3번마을의 거리 10)
25 : 1번마을과 4번마을 사이의 거리는 25입니다. (3 + 10 + 12)
30 : 1번마을과 5번마을 사이의 거리는 30입니다. (3 + 10 + 12 + 5)
동일한 방식으로 5번째 마을까지 계산하여 출력해 줍니다.
솔루션 코드
# 문자열 입력받아서 리스트로 저장
input_text = list(map(int,input().split()))
# 계산을 위한 마을 사이의 거리 리스트 생성
first_town = [0]
for i in range(1,5):
first_town.append(first_town[i-1] + input_text[i-1])
# 1~5번 마을 순회하면서 거리 구하기
for i in range(5):
town = []
for k in range(5):
town.append(abs(first_town[i] - first_town[k]))
print(*town)
전체 계산을 위해 먼저 1번 마을과 다른 마을들 사이의 거리를 계산한 리스트를 만듭니다.
이후 두 번의 반복문을 통해, 지금 있는 마을(i)과 다른 마을들(k)의 거리를 비교합니다.
'문제정리' 카테고리의 다른 글
USACO 2023 US Open Contest, Bronze Problem 1 FEB (0) | 2023.08.08 |
---|---|
COCI '14 Contest 2 #2 Utrka (0) | 2023.07.25 |
DMOPC '19 Contest 5 P1 Conspicuous Cryptic Checklist (0) | 2023.07.11 |
DMOPC '19 Contest 3 P1 - Mode Finding (0) | 2023.07.05 |
COCI 2015 Contest 2 #1 Marko (0) | 2023.07.03 |