티스토리 뷰
문제 설명
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
강변에 빌딩들이 옆으로 빽빽하게 밀집한 지역이 있다.이곳에서는 빌딩들이 너무 좌우로 밀집하여, 강에 대한 조망은 모든 세대에서 좋지만 왼쪽 또는 오른쪽 창문을 열었을 때 바로 앞에 옆 건물이 보이는 경우가 허다하였다.그래서 이 지역에서는 왼쪽과 오른쪽으로 창문을 열었을 때, 양쪽 모두 거리 2 이상의 공간이 확보될 때 조망권이 확보된다고 말한다.빌딩들에 대한 정보가 주어질 때, 조망권이 확보된 세대의 수를 반환하는 프로그램을 작성하시오. 아래와 같이 강변에 8채의 빌딩이 있을 때, 연두색으로 색칠된 여섯 세대에서는 좌우로 2칸 이상의 공백이 존재하므로 조망권이 확보된다. 따라서 답은 6이 된다.
A와 B로 표시된 세대의 경우는 왼쪽 조망은 2칸 이상 확보가 되었지만 오른쪽 조망은 한 칸 밖에 확보가 되지 않으므로 조망권을 확보하지 못하였다.
C의 경우는 반대로 오른쪽 조망은 2칸이 확보가 되었지만 왼쪽 조망이 한 칸 밖에 확보되지 않았다.
[제약 사항]
가로 길이는 항상 1000이하로 주어진다.
맨 왼쪽 두 칸과 맨 오른쪽 두 칸에는 건물이 지어지지 않는다. (예시에서 빨간색 땅 부분)
각 빌딩의 높이는 최대 255이다.
[입력]
총 10개의 테스트케이스가 주어진다.
각 테스트케이스의 첫 번째 줄에는 건물의 개수 N이 주어진다. (4 ≤ N ≤ 1000)
그 다음 줄에는 N개의 건물의 높이가 주어진다. (0 ≤ 각 건물의 높이 ≤ 255)
맨 왼쪽 두 칸과 맨 오른쪽 두 칸에 있는 건물은 항상 높이가 0이다. (예시에서 빨간색 땅 부분)
[출력]
#부호와 함께 테스트케이스의 번호를 출력하고, 공백 문자 후 조망권이 확보된 세대의 수를 출력한다.
입력
10
0 0 254 185 76 227 84 175 0 0
10
0 0 251 199 176 27 184 75 0 0
11
0 0 118 90 243 178 99 100 200 0 0
...
출력
#1 111
#2 60
#3 165
...
풀이 과정
빌딩을 5개씩 확인하면 됩니다.
양옆 2개씩 높이를 비교할 후보군 4개를 두고 후보군보다 높이가 큰 빌딩 A가 있으면, A의 높이에서 후보군 중 최대 높이를 뺀 값이 빌딩 A의 조망권이 확보된 세대의 수가 됩니다.
이 값을 모든 빌딩을 돌면서 누적하면 됩니다.
정답 코드
T = 10 # 고정 안 하면 틀렸다고 나옴
for test_case in range(1, T + 1):
N = int(input())
buildings = list(map(int, input().split()))
answer = 0
# 양옆 2개씩 확인할 수 있는 최소 시작점 2부터 시작
for i in range(2, N-1):
# 왼쪽 2개, 오른쪽 2개보다 i번째 빌딩의 높이가 더 크면
if buildings[i] > buildings[i-1] and buildings[i] > buildings[i-2] and buildings[i] > buildings[i+1] and buildings[i] > buildings[i+2]:
# 그 빌딩이 5개 중 최대 높이
max_building = buildings[i]
# 양옆 4개 후보군 중 최대 높이 구하기
max_candidate = max(buildings[i-2], buildings[i-1], buildings[i+1], buildings[i+2])
# 둘의 차이가 max_building에서 조망권을 가지는 세대의 수
answer += max_building - max_candidate
print("#%d %d" %(test_case, answer))
이상입니다.
'Algorithm' 카테고리의 다른 글
백준 2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (S4) - Python 풀이 (0) | 2025.04.20 |
---|---|
프로그래머스 Lv.3: 디스크 컨트롤러 - Python 풀이 (1) | 2025.04.18 |
SWEA 1859번: 백만 장자 프로젝트 (D2) - Python 풀이 (0) | 2025.04.17 |
백준 1202번: 보석 도둑 (G2) - Python 풀이 (1) | 2025.04.16 |
프로그래머스 Lv.2: 다리를 지나는 트럭 - Python 풀이 (0) | 2025.04.15 |
- Total
- Today
- Yesterday
- 코테준비
- 완전탐색
- ios
- 투포인터
- 스택
- D3
- SQL
- 이분탐색
- 다이나믹프로그래밍
- dfs
- 큐
- 힙
- Deque
- swea
- dp
- Python
- Swift
- 백준
- D2
- 백트래킹
- Baekjoon
- BFS
- Swift로백준풀기
- 코딩테스트
- MySQL
- 프로그래머스
- 그리디
- 알고리즘
- Programmers
- 구현
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |