[SSAFY][D3]swea_1206 View

피용희·2024년 5월 6일
0

처음 풀이의 경우, 접근 방법 자체는 좋았으나.(5개씩 비교하되, 만약 가운데 수보다 더 큰 빌딩이 있으면 지나간다.) 두번째 max 값을 일일이 비교하는 과정이 좀 번거로워 보여서 마음에 들지 않았다. 뭣보다 뭐가 문젠지 계속 runtime error가 발생했다...

그래서 기존에 풀었던 풀이를 다음과 같은 방식으로 변경해서 2차 풀이를 진행했다.

  1. input 방식 -> scanner에서 fileinputStream으로 변환(첫 시도)

  2. 비교 방식 -> 가운데 수를 두고, 나머지 수 안에서 max 값을 구함. 그 다음에 max값이 더 클 경우 지나가고, 작으면 값을 빼서 더해준다.(기존에 내가 풀었던 secondMax값을 더 합리적으로 찾을 수 있는 것이다.)

  3. 기존 풀이(접근 방향 자체는 맞으나, runtime error 발생)

import java.util.Scanner;

public class swea_1206 {
	public static void main(String[] args) {
		StringBuilder stb = new StringBuilder();
		
		for(int z = 1; z <= 10; z++) { //기본 테케 10
			Scanner sc = new Scanner(System.in);
			int num = sc.nextInt();
			
			int ans = 0;
			int[] building = new int[num];
			
			for(int i = 0; i<num; i++) {
				building[i] = sc.nextInt();
			}
			
			
			for(int i = 0; i<num-5; i++) {
				int max = building[i+2]; //가운데 값
				
				int secondMax = 0;
				boolean check = true;
				
				for(int j = i; j<i+5; j++) {
					if(building[j] > max) {
						check = false;
						break;
					}else {
						if(j != i+2) { //당사자가 아닐때
							if(secondMax < building[j]) {
								secondMax = building[j];
							}
						}
					}
				}
				if(check) {
					ans += max - secondMax;
				}
			}
			stb.append("#" + z + " " + ans);
			stb.append("\n");
		}
		System.out.println(stb);
	}

}
  1. 바뀐 풀이
public class swea_1206 {
	public static void main(String[] args) throws FileNotFoundException {
		StringBuilder stb = new StringBuilder();
		
//		System.setIn(new FileInputStream("src/res/sample_input.txt"));
        Scanner sc = new Scanner(System.in);
		
		for(int z = 1; z <= 10; z++) { //기본 테케 10
			int num = sc.nextInt();
			
			int ans = 0;
			int[] building = new int[num];
			
			for(int i = 0; i<num; i++) {
				building[i] = sc.nextInt();
			}
			
			for(int i = 0; i<=num-5; i++) {
				int senter = building[i+2]; //가운데 값
				int max = Math.max(building[i], Math.max(building[i+1], Math.max(building[i+3], building[i+4])));
			
				if(senter > max) {
					ans += senter - max;
				}
			}
			stb.append("#" + z + " " + ans);
			stb.append("\n");
		}
		System.out.println(stb);
	}
}
  1. 결과

사실 인덱스 때문에 한 번 틀렸어서 틀린 흔적이 있다ㅠㅠㅠ인덱스 잘 보기!!

profile
코린이

0개의 댓글

관련 채용 정보