처음 풀이의 경우, 접근 방법 자체는 좋았으나.(5개씩 비교하되, 만약 가운데 수보다 더 큰 빌딩이 있으면 지나간다.) 두번째 max 값을 일일이 비교하는 과정이 좀 번거로워 보여서 마음에 들지 않았다. 뭣보다 뭐가 문젠지 계속 runtime error가 발생했다...
그래서 기존에 풀었던 풀이를 다음과 같은 방식으로 변경해서 2차 풀이를 진행했다.
input 방식 -> scanner에서 fileinputStream으로 변환(첫 시도)
비교 방식 -> 가운데 수를 두고, 나머지 수 안에서 max 값을 구함. 그 다음에 max값이 더 클 경우 지나가고, 작으면 값을 빼서 더해준다.(기존에 내가 풀었던 secondMax값을 더 합리적으로 찾을 수 있는 것이다.)
기존 풀이(접근 방향 자체는 맞으나, 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);
}
}
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);
}
}
사실 인덱스 때문에 한 번 틀렸어서 틀린 흔적이 있다ㅠㅠㅠ인덱스 잘 보기!!