[구름톤 챌린지 2주 차 학습 일기] 7일차 미션 문제 7. 구름 찾기 깃발 (java)
Problem Solving/goorm

[구름톤 챌린지 2주 차 학습 일기] 7일차 미션 문제 7. 구름 찾기 깃발 (java)

728x90

https://level.goorm.io/exam/195689/%EA%B5%AC%EB%A6%84-%EC%B0%BE%EA%B8%B0-%EA%B9%83%EB%B0%9C/quiz/1

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io


728x90

 

내 생각

오늘 문제는 한 점에서 8방 탐색하는 방법만 잘 알고 있으면 쉽게 풀 수 있는 문제 같다.


import java.io.*;
import java.util.*;

class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		// N과 K 입력
		st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		
		// 게임판 정보 입력
		int[][] board = new int[N][N];
		for(int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for(int j = 0; j < N; j++) {
				board[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		
		// K인 깃발 개수 세기
		int result = 0;
		int[] dx = {-1, -1, -1, 0, 0, 1, 1, 1};
		int[] dy = {-1, 0, 1, -1, 1, -1, 0, 1};
		for(int i = 0; i < N; i++) {
			for(int j = 0; j < N; j++) {
				if(board[i][j] == 1) continue; // 구름이 있다면 넘어가기
				int count = 0; // 주변에 구름이 몇 개 있는지
				for(int k = 0; k < 8; k++) { // 8방 탐색
					int nx = i + dx[k];
					int ny = j + dy[k];
					if(nx >= 0 && nx < N && ny >= 0 && ny < N) { // 범위 체크
						if(board[nx][ny] == 1) count++;
					}
				}
				if(count == K) result++; // K 깃발이라면 답 + 1
			}
		}
		
		// 답 출력
		System.out.println(result);
	}
}
728x90