Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

잡동사니 블로그

[백준] 9919 - Route (python) 본문

Python/백준

[백준] 9919 - Route (python)

코딩부대찌개 2023. 4. 21. 23:21

https://www.acmicpc.net/problem/9919

 

9919번: Route

The input contains the integer N, the length of the route in metres, on the first line.  The subsequent N lines contain the heights of the poles (in centimetres above sea-level) in the jogging direction: the first, second, ..., last of these N lines conta

www.acmicpc.net

번역 되었습니다.

문제

시골의 조깅 루트는 루프이기 때문에 출발점이 곧 종점이기도 하다. 1미터 간격의 경로 높이는 해수면 위의 센티미터 단위로 측정 목록으로 제공됩니다.

예 1. 간단한 3미터 경로가 아래에 나와 있습니다. 높이는 다이어그램에서 "극점"으로 표시됩니다. 조깅 방향의 시작점(끝점이기도 한 폴 1)부터 폴의 높이가 10, 20 및 30입니다.

인접한 두 극점 사이의 경로가 직선이라고 가정할 수 있습니다.

경로에서 (1) 평지의 수, (2) 오르막의 수, (3) 내리막의 수를 계산해야 합니다. 평야, 오르막 또는 내리막은 각각 조깅 방향으로 수평, 오르막 또는 내리막인 가장 긴 연속적인 땅입니다. 위의 예에서 하나의 오르막(폴 1에서 폴 2로 그리고 나서 폴 3으로) 하나와 내리막 하나(폴 3에서 다시 폴 1로, 조깅하는 사람이 멈춰야 함)가 있습니다. 평야가 없습니다.

더 많은 예가 아래에 나와 있으며, 쉽게 볼 수 있도록 루프 대신 직선에 "폴"이 그려져 있습니다(그러나 마지막 폴 이후 조깅하는 사람은 첫 번째 폴에서 끝내기 위해 더 멀리 가야 함을 기억하십시오).

 

예 2. 폴이 6개인 다음 조깅 경로를 고려하십시오.

유일한 평야는 기둥 4에서 5까지입니다. 두 개의 오르막은 기둥 1에서 3까지 그리고 기둥 6에서 1까지입니다. 두 개의 내리막은 기둥 3에서 4까지와 기둥 5에서 6까지입니다.

예 3. 이제 7폴 조깅 경로를 고려하십시오.

3개의 평야는 극 1~2, 극 3~4, 극 5~1입니다. 유일한 오르막은 극 2~3입니다. 유일한 내리막은 극 4~5입니다.

예 4. 다음은 9폴 조깅 경로입니다.

 

유일한 평야는 기둥 9에서 1까지입니다. 두 개의 오르막 경사는 기둥 1에서 3과 기둥 5에서 7입니다. 두 개의 내리막은 기둥 3에서 5와 기둥 7에서 9입니다.

  1. 입력값을 읽어 경로의 길이 N(미터 단위)(3 ≤ N ≤ 30,000)과 높이 H i , 1 ≤ i ≤ N, 해발 센티미터 단위(1 ≤ H i ≤ 30,000)를 구합니다. 모든 값은 양의 정수입니다.
  2. 평지, 오르막, 내리막의 수를 계산합니다.
  3. 3개의 숫자를 이 순서대로 한 줄에 출력에 쓰십시오: 평지의 수, 오르막의 수, 내리막의 수.

입력

입력에는 첫 번째 줄에 미터 단위의 경로 길이인 정수 N이 포함됩니다. 후속 N 라인에는 조깅 방향의 폴 높이(해수면 위 센티미터)가 포함됩니다. 이러한 N 라인의 첫 번째, 두 번째, ..., 마지막에는 첫 번째, 두 번째, ..., 각각 마지막 기둥.

출력

출력에는 평지 수, 오르막 수, 내리막 수의 순서로 한 줄에 3개의 숫자가 포함되어야 합니다. 인접한 두 숫자 사이에는 공백이 있어야 합니다.

예제 입력 1

3
10
20
30

예제 출력 1

0 1 1

예제 입력 2 

6
20
23
60
50
50
12

예제 출력 2 

1 2 2

예제 입력 3 

7
10
10
30
30
10
10
10

예제 출력 3 

3 1 1

예제 입력 4 

9
10
20
30
20
10
20
30
20
10

예제 출력 4 

1 2 2

풀이

import sys
input = sys.stdin.readline
flat,up,down=0,0,0
count=int(input())
a=[0] * (count+1)
a[0] = int(input())
flag=0
for i in range(1,count+1):
    if i < count :
        a[i] = int(input())
    else : 
        a[i] = a[0]
    if a[i] == a[i-1] and flag != 1 :
        flat +=1 
        flag = 1
    elif a[i] > a[i-1] and flag != 2 :
        up +=1 
        flag = 2
    elif a[i] < a[i-1] and flag != 3 :
        down +=1 
        flag = 3
print(flat, up, down)

처음 N 만큼의 길이를 가진 배열을 선언하여 반복문을 돌며 flag 변수에 따라 평지 오르막 내리막을 구분 하였음.

모든 리스트가 담긴 a에서 a[i]는 a[i-1]랑 비교했을 때 flag를 통해 평지 오르막 내리막을 판단하였고, 마지막에는 돌아오기 때문에 원래의 처음 값인 a[0]을 다시 추가하여 판별 하였음.

 

 

 

나름 쉬웠던 문제 같습니다.