Notice
Recent Posts
Recent Comments
Link
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Archives
Today
Total
관리 메뉴

UpDown Dev Story

알고리즘 연습 - 봉우리 본문

Algorithm

알고리즘 연습 - 봉우리

updown 2021. 6. 3. 18:40

아래 강의를 보면서 연습하고 기록하고 있습니다

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%ED%85%8C%EB%8C%80%EB%B9%84

 

자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 - 인프런 | 강의

자바(Java)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 코딩테스트에서 가장 많이 출제되는 Top 10 Topic을 다루고 있습니다. 주제와 연동하여 기초문제부터 중급문제까지 단계적으로 구성

www.inflearn.com

 

문제

 

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int inputInt = sc.nextInt(); // 숫자 입력받음
		int[][] inputArrXY = new int[inputInt][inputInt];

		for (int i = 0; i < inputInt; i++) { // for loop 돌면서 숫자들 배열에 넣는다
			for (int j = 0; j < inputInt; j++) {
				inputArrXY[i][j] = sc.nextInt();
			}
		}
		int count = 0;

		for (int i = 0; i < inputInt; i++) {
			for (int j = 0; j < inputInt; j++) {
				boolean flag = true;

				// 상
				if (i != 0 && inputArrXY[i][j] < inputArrXY[i - 1][j]) { // 가장자리는 0으로 초기화 되고 격자판에서 위에 숫자가 자신보다 큰수인지 확인
					flag = false;
				}

				// 하
				if (i != inputInt - 1 && inputArrXY[i][j] < inputArrXY[i + 1][j]) { // 가장자리는 0으로 초기화 되고 격자판에서 아래에 숫자가 자신보다 큰수인지 확인
					flag = false;
				}

				//좌
				if (j != 0 && inputArrXY[i][j] < inputArrXY[i][j - 1]) { // 가장자리는 0으로 초기화 되고 격자판에서 위에 왼쪽에 숫자가 자신보다 큰수인지 확인
					flag = false;
				}

				//우
				if (j != inputInt - 1 && inputArrXY[i][j] < inputArrXY[i][j + 1]) { // 가장자리는 0으로 초기화 되고 격자판에서 오른쪽에 숫자가 자신보다 큰수인지 확인
					flag = false;
				}

				if (flag) {
					count++;
				}
			}
		}
		System.out.println(count);
	}
}

 

강사님 소스코드

import java.util.*;
class Main {	
	int[] dx={-1, 0, 1, 0}; // 미리 상,하,좌,우 값을 정해놓고 시작
	int[] dy={0, 1, 0, -1}; // 미리 상,하,좌,우 값을 정해놓고 시작
	public 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=j+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;
	}

	public static void main(String[] args){
		Main T = new Main();
		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.print(T.solution(n, arr));
	}
}
Comments