개발놀이터
2-10. 봉우리 본문
package 배열1차원2차원.봉우리2다시10.my;
import java.util.Scanner;
public class Main {
/**
* -내 풀이-
* 좀 더 객체지향스럽게 구현하고자 기준점이 되는 값을 기준으로 왼쪽 오른쪽 위쪽 아래쪽을 비교하는 각각의
* 메서드를 만들어서 코드가 좀 깔끔해보이게 만들었다.
*
* -선생님의 풀이-
* dx, dy 의 개념을 도입해서 시계방향으로 인덱스를 검사하여 값을 확인하는 로직을 구현하셨다.
* 근데 너무 어지럽게 코드가 짜여져있고 3중 for 문에 안에 if 문까지 있어서 읽기 굉장히 힘듦
* 개인적으로는 내 코드가 좀 더 깔끔하고 읽기 편하기 때문에 이 문제의 정답은 내 코드로 결정
*/
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int input = kb.nextInt();
int[][] arr = new int[input][input];
for (int i = 0; i < input; i++) {
for (int j = 0; j < input; j++) {
arr[i][j] = kb.nextInt();
}
}
System.out.println(solution(input, arr));
}
private static int solution(int input, int[][] arr) {
int answer = 0;
int[][] plat = new int[input + 2][input + 2];
for (int i = 0; i < input ; i++) {
for (int j = 0; j < input ; j++) {
plat[i + 1][j + 1] = arr[i][j];
}
}
for (int i = 1; i <= input; i++) {
for (int j = 1; j <= input; j++) {
if (isLeftThenBigger(plat[i][j], plat[i][j + 1]) && isRightThenBigger(plat[i][j], plat[i][j - 1]) &&
isUpThenBigger(plat[i][j], plat[i - 1][j]) && isUnderThenBigger(plat[i][j], plat[i + 1][j])) {
answer++;
}
}
}
return answer;
}
private static boolean isLeftThenBigger(int num, int left) {
if (left < num) {
return true;
}
return false;
}
private static boolean isRightThenBigger(int num, int right) {
if (num > right) {
return true;
}
return false;
}
private static boolean isUpThenBigger(int num, int up) {
if (num > up) {
return true;
}
return false;
}
private static boolean isUnderThenBigger(int num, int under) {
if (num > under) {
return true;
}
return false;
}
}
package 배열1차원2차원.봉우리2다시10.teacher;
import java.util.Scanner;
public class Main {
static int[] dx = {-1, 0, 1, 0};
static int[] dy = {0, 1, 0, -1};
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[][] arr = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = kb.nextInt();
}
}
System.out.println(solution(n, arr));
}
private static int solution(int n, int[][] arr) {
int answer = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
boolean flag = true;
for (int k = 0; k < 4; k++) {
int nx = i + dx[k];
int ny = i + dy[k];
if (nx >= 0 && nx < n && ny >= 0 && ny < n && arr[nx][ny] >= arr[i][j]) {
flag = false;
break;
}
}
if (flag) {
answer++;
}
}
}
return answer;
}
}
이번만큼은 선생님보다 잘 풀었다고 자부할 수 있다. 처음 코드를 작성할 때부터 객체지향스럽게 만들어야겠다는 생각을 하고 만들어서 그런지 좀 더 코드가 깔끔하게 나온 듯 하다.
'기타 > 코딩테스트' 카테고리의 다른 글
2-12. 멘토링 (0) | 2023.02.14 |
---|---|
2-11. 임시반장 (0) | 2023.02.14 |
2-9 격자판 최대합 (0) | 2023.02.14 |
2-8. 등수 구하기 (0) | 2023.02.14 |
2-7. 점수 계산 (0) | 2023.02.14 |