1. 문제 출처
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV134DPqAA8CFAYh
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
2. 설계
2-1. 문제 살펴보기
- 각 빌딩의 세대 별로 조망권이 확보되었는지 확인하는 문제
- 조망권은 좌/우 2개 이상이 비어있을 때 확보
=> 몇 세대가 조망권이 확보되었는가?
2-2. 입출력 확인
- 테스트 케이스는 10으로 고정
- 1000이하의 가로 가운데 N개의 빌딩이 있는 것(빌딩은 높이가 0일 수 있음)
- 빌딩 단위로 양 옆 2 거리에 나보다 큰 빌딩이 있으면 조망권 확보 실패 (=조망권이 있는 세대가 없음)
- 빌딩 단위로 양 옆 2 거리에 나보다 큰 빌딩이 없으면, 양 옆 2 거리 건물 차 중 가장 작은 수 만큼 조망권 세대 확보
3. 전체 코드
import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
for(int T=1;T<=10;T++) {
int building_count = sc.nextInt();
int[] building_height_list = new int[building_count];
for(int i=0;i<building_count;i++) {
building_height_list[i]=sc.nextInt();
}
//입력 끝
int result = 0; //조망권 확보 수
for(int i=0;i<building_count;i++) {
if(building_height_list[i]==0) continue;
int min = Integer.MAX_VALUE;
boolean go = true;//우측도 살필까?
//좌 높이 살피기
for(int left=1;left<=2;left++) {
if(building_height_list[i-left]<building_height_list[i]) {
//현 빌딩보다 작다. -> 높이차 구하고, 가장 작은 높이면 교체
int diff = building_height_list[i] - building_height_list[i-left];
min=Math.min(min, diff);
}
else {
//현 빌딩보다 크다. -> 조망권 확보 실패 -> 우측도 확인할 필요 없음
go = false;
break;
}
}//left for
//우 높이 살피기
if(go) {
for(int right=1;right<=2;right++) {
if(building_height_list[i+right]<building_height_list[i]) {
//현 빌딩보다 작다. -> 높이차 구하고, 가장 작은 높이면 교체
int diff = building_height_list[i] - building_height_list[i+right];
min=Math.min(min, diff);
}
else {
//현 빌딩보다 크다. -> 조망권 확보 실패 -> 우측도 확인할 필요 없음
go = false;
break;
}
}//right for
}//right if
if(go) result += min;//좌우를 모두 살폈을 때 한 빌딩(테스트케이스)에서 조망권은 몇 세대?
}//i for
//결과 도출
System.out.println("#"+T+" "+result);
}
}
}
풀면서 실수했던 점
1) building_height_list[i-left] (이 실수가 제일 큼...)
- 좌/우 코드가 - , +만 달랐는데, i-right로 뇌빼고 풀었던 점
2) result += min
- 한 테스트 케이스에서 전체 조망권은 result에 저장됨 근데 +를 안써줬었음
3) 결과 출력
result가 아닌 min을 결과값으로 출력하려고 함
- min은 한 빌딩이 조망권을 갖췄을 때 세대 수를 의미함
- result는 한 테스트 케이스의 n개의 빌딩의 몇 세대가 조망권을 갖췄는지를 의미함
=> 서로 다름 result를 출력하는 것이 맞음
'알고리즘 > SWEA' 카테고리의 다른 글
1208. Flatten [#1차원 배열] (0) | 2023.10.09 |
---|---|
16504. Gravity (1차원 배열), 2월의 나와 10월의 나의 풀이 차이 (1) | 2023.10.09 |
[부분집합] SWEA 5215번 햄버거 다이어트 - JAVA (0) | 2023.04.06 |
1210. Ladder1 (0) | 2023.02.15 |
1979. 어디에 단어가 들어갈 수 있을까 (0) | 2023.02.15 |