Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Flatten
- 나는야 포켓몬 마스터 이다솜
- 해시맵
- 에라토스테네스의체
- 이분탐색
- 간단한 369게임
- 투포인터
- SWEA
- 좌표 정렬하기
- N-Queen
- 최단경로
- 플루이드-워셜
- 회의실 배정
- 다리놓기
- boj
- D2
- BFS
- firebase
- 터렛
- D3
- 완전탐색
- 백만 장자 프로젝트
- dfs
- 우선순위 큐
- 그리디 알고리즘
- 배포
- 브루트포스
- 스도쿠 검증
- 다이나믹프로그래밍
- LRU
Archives
- Today
- Total
허비의 기술블로그
[SWEA] VIEW(1206) - PYTHON 본문
일렬로 나열된 빌딩들의 층 수가 주어지면 모든 빌딩의 각 층에서, 좌우 각각 2개의 빌딩에 대해 조망이 확보되는 층의 개수를 구하는 문제이다.
시간복잡도: O(N)
풀이 방법
빌딩 배열에서 좌, 우 끝의 2개 빌딩은 높이가 0이라고 주어졌으므로, 3~M-2번째 빌딩의 층들만 조망 가능 여부를 검사하면 된다.(M:빌딩의 개수)
검사 방법은 우선 좌, 우 각각 2개의 빌딩에서 가장 높은 빌딩의 층 수를 구한 다음, 현재 빌딩의 층수와 비교한다.
현재 빌딩의 층 수가 더 높다면, 현재 빌딩에서 조망 가능한 층은 없으며, 현재 빌딩이 더 높다면, 높은 층들은 조망이 가능하다.
이렇게 범위 내 조망이 가능한 층들을 구해서 더한 다음 그 수를 출력한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
|
N = 10
for i in range(1, N + 1):
M = int(input())
answer = 0
arr = list(map(int, input().split()))
for j in range(2, M - 2):
leftMax = max(arr[j - 1], arr[j - 2])
rightMax = max(arr[j + 1], arr[j + 2])
answer += max(arr[j] - max(leftMax, rightMax), 0)
print("#", i, " ", answer, sep="")
|
cs |
주석 추가
1
2
3
4
5
6
7
8
9
10
11
|
N = 10 # TC 개수
for i in range(1, N + 1):
M = int(input()) # 빌딩 개수
answer = 0 # 정답값
arr = list(map(int, input().split())) # 빌딩 열 입력
for j in range(2, M - 2): # 3 ~ M - 2번째 빌딩 범위에서
leftMax = max(arr[j - 1], arr[j - 2]) # 왼쪽 2개 빌딩 최대값
rightMax = max(arr[j + 1], arr[j + 2]) # 오른쪽 2개 빌딩 최대값
answer += max(arr[j] - max(leftMax, rightMax), 0) # 현 빌딩 높이와 최댓값의 차이, 0 중의 최대값
print("#", i, " ", answer, sep="") #출력
|
cs |
'SWEA' 카테고리의 다른 글
[SWEA] Flatten(1208) - PYTHON (0) | 2022.05.02 |
---|---|
[SWEA] 스도쿠 검증(1974) - PYTHON (0) | 2022.04.30 |
[SWEA] 간단한 369게임(1926) - PYTHON (0) | 2022.04.30 |
[SWEA] 백만 장자 프로젝트(1859) - PYTHON (0) | 2022.04.30 |
Comments