문제해석
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