난이도 : D3
문제번호 : 1206
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
강변에 빌딩들이 옆으로 빽빽하게 밀집한 지역이 있다.
A와 B로 표시된 세대의 경우는 왼쪽 조망은 2칸 이상 확보가 되었지만 오른쪽 조망은 한 칸 밖에 확보가 되지 않으므로 조망권을 확보하지 못하였다. |
제약사항
가로 길이는 항상 1000이하로 주어진다. 맨 왼쪽 두 칸과 맨 오른쪽 두 칸에는 건물이 지어지지 않는다. (예시에서 빨간색 땅 부분) 각 빌딩의 높이는 최대 255이다. |
입력
입력 파일의 첫 번째 줄에는 테스트케이스의 길이가 주어진다. 그 바로 다음 줄에 테스트 케이스가 주어진다. |
출력
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 조망권이 확보된 세대의 수를 출력한다. |
예시
입력 | 출력 |
100 0 0 225 214 82 73 241 233 179 219 135 62 36 13 6 71 179 77 67 139 31 90 9 37 ... 1000 0 0 225 214 82 73 241 233 179 219 135 62 36 13 6 71 179 77 67 139 31 90 9 37 ... ... |
#1 691 #2 9092 ... |
2. 문제풀이
D3문제인데 토너먼트 카드게임 문제보다 쉬운 문제였다. 양옆으로 2칸이상 확보된 집을 찾는 문제이다. 배열에 벗어나는 에러를 줄여주기 위해 양끝에 2칸씩은 비워져있는 친절한 문제였다.
현재 자신을 기준으로 양쪽 2칸중 제일 큰 빌딩을 찾고 자기 자신에서 제일큰 빌딩을 뺏을때 0보다 크다면 그 차이만큼 결과값에 더해주면 끝나는 간단한 문제였다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#D3 1206 view 조망권
#10회 반복
for l in range(1, 11):
r = int(input())
b = list(map(int, input().split()))
c = 0
#왼쪽2칸과 오른쪽 2칸은 비어있음
for i in range(2, r-2):
#왼쪽과 오른쪽 빌딩중에서 제일 빌딩을 찾음
m = max(b[i+1], b[i+2], b[i-1], b[i-2])
# 현재 빌딩과 제일큰빌딩을 비교할때 현재빌딩보다 작다면 차 만큼 결과에 더해주기
if b[i] - m > 0 : c += b[i] - m
print("#{} {}".format(l, c))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
회문1 Python(SW Expert Academy) (0) | 2020.03.15 |
---|---|
Flatten Python(SW Expert Academy) (0) | 2020.03.14 |
배열 최소 합 Python(SW Expert Academy) (3) | 2020.03.12 |
토너먼트 카드게임 Python(SW Expert Academy) (0) | 2020.03.11 |
미로(4875) Python(SW Expert Academy) (0) | 2020.03.10 |
댓글