SelfStudyBook(3)(1206)(View)

문제해석

2칸 이상의 조망권이 확보된 세대의 수를 구하는 문제.

가로 길이는 항상 1000

맨 왼쪽 두 칸과 오른쪽 두 칸에는 건물이 지어지지 않는다. 각 빌딩의 높이는 최대 255이다.

내가 오랜 시간을 잡아 먹은 이유는 조건문을 걸어줘서 해당 내용을 걸러주지 못했다. 문제를 단순하게 접근해야 한다. 반복문을 돌면서, 해당 시점에서 왼쪽으로 2칸, 오른쪽으로 2칸을 바라본 뒤, 그 때 해당하는 값을 접근해야하는데, 한 시점에서 어떤 값이 가장 큰지 생각하다가 꼬여버렸다.

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

public class Solution {


	public static void main(String[] args) {

		Scanner stdIn = new Scanner(System.in);

		for(int a = 1; a<11; a++) {
			int answer = 0;

			int H = stdIn.nextInt();
			int []arr = new int[H];
			for(int i = 0 ; i < H; i++) {
				arr[i]= stdIn.nextInt();
			}
		    for(int j = 2; j < H-2; j++){
	            int k = j;
	            int temp[] = {arr[k-2], arr[k-1], arr[k+1], arr[k+2]};
	            Arrays.sort(temp);

	            if((arr[k] > arr[k+1]) && (arr[k] > arr[k-1]) && (arr[k] > arr[k+2]) && (arr[k] > arr[k-2])){
	                answer += arr[k] - temp[3];

	            }
	            else{
	                continue;
	            }

	        }
		    System.out.println("#"+a+" "+ answer);
		}
	}
}

내가 풀었던 접근 방식 복기 -> 다음에 다시 정렬을 하지 않고 풀기



import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

public class Solution {


	public static void main(String[] args) {

		Scanner stdIn = new Scanner(System.in);

		for(int a = 1; a<11; a++) {
			int answer = 0;

			int H = stdIn.nextInt();
			int []arr = new int[H];
			for(int i = 0 ; i < H; i++) {
				arr[i]= stdIn.nextInt();
			}
		  for(int j = 2; j < H-2; j++){
	            int max = 0;
	            int secondMax = 0;
				for(int k= -2; k<3; k++) {
					if(arr[j+k]>max) {
						secondMax = max;
						max=arr[j+k];
					}else if(arr[j+k] != max && arr[j+k]>secondMax)
						secondMax=arr[j+k];
				}

//	            int temp[] = {arr[k-2], arr[k-1], arr[k+1], arr[k+2]};
//	            Arrays.sort(temp);

	            if((arr[j] > arr[j+1]) && (arr[j] > arr[j-1]) && (arr[j] > arr[j+2]) && (arr[j] > arr[j-2])){
	                answer += arr[j] - secondMax;
	            }
	            else{
	                continue;
	            }

	        }
		    System.out.println("#"+a+" "+ answer);
		}
	}
}

함수화시키기

함수화를 시켜서 구한다면. 가장 큰 값에 해당하는 것만 인덱스를 받아서 더해줄 수 있지 않을까 싶었다.

구현이 안되서 일단 두었다.


참고자료

소프트웨어 아카데미 S/W Problem Solving

참고블로그 http://dailyddubby.blogspot.com/2018/04/92sw-expert-academy-1206-sw-1-view.html

https://battlewithmyself.tistory.com/129

두 번째로 큰 수 찾기 https://bestcoding.tistory.com/22

0%