난이도 : D3
문제번호 : 1206
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
목차
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 |
댓글