본문 바로가기
Coding Test/SWEA 풀이

[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View : D3 (java)

by CSEGR 2024. 11. 15.
728x90

✔️문제 설명

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV134DPqAA8CFAYh&categoryId=AV134DPqAA8CFAYh&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=JAVA&select-1=3&pageSize=10&pageIndex=1&&&&&&&&&&

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

✔️문제 풀이

‼️‼️ 테스트 케이스 한 개 통과 못함 이슈

아무리 봐도 코드가 맞는데, 자꾸 테스트 케이스 한 개를 통과를 못 했다.. 

커뮤니티를 확인했는데, 이 댓글을 보고 갑자기 유레카...

 	   if(n != 4){
                for(int j = 2; j< n-2; j++){
                    max = 0;
                    for(int k =-2; k<3 ; k++){
                        if(k == 0) continue;
                        if(arr[j] < arr[j+k]) {
                            max = 0;
                            break;
                      }
                        max = Math.max(max, arr[j+k]);
                    }
                    if(max != 0) total += (arr[j] - max);
                }
            }

이게 나의 틀린 코드 중 오류난 부분이다. 

max 가 0 이 아닐때 조망이 가능하다고 판단하고 조망 가능 층 수를 계산하기 때문에 틀린거였다..

그래서 조망 불가능한 상황(좌우로 4칸 중 더 높은 건물이 있는 경우)은 max 가 -1이 되도록 처리 해주었다.!!

 

 

실행 결과

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.StringTokenizer;

class Solution
{
	public static void main(String args[]) throws IOException
	{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
		for(int i =0 ; i<10; i++){
            int n = Integer.parseInt(br.readLine());
            int[] arr = new int[n];
            int total = 0;
            st = new StringTokenizer(br.readLine());
            for(int j = 0; j<n; j++){
                arr[j] = Integer.parseInt(st.nextToken());
            }
            int max  = 0;
           
            for(int j = 2; j< n-2; j++){
               max = 0;
               for(int k =-2; k<3 ; k++){
                   if(k == 0) continue;
                   if(arr[j] < arr[j+k]) {
                       max = -1;
                       break;
                   }
                   max = Math.max(max, arr[j+k]);
           		}
               if(max != -1) total += (arr[j] - max);
            }
            System.out.printf("#%d %d\n", i+1, total);
        }
	}
}

 

 

✔️ 개선 코드 부분

 	for(int j = 2; j< n-2; j++){
                    max = -1;
                    for(int k =-2; k<3 ; k++){
                        if(k == 0) continue;
            
                        max = Math.max(max, arr[j+k]);
                    }
                    if(arr[j] > max) total += (arr[j] - max);
                }

 

728x90