구름톤 챌린지 구름 찾기 깃발

[느낀점]

문제를 보자마자 아 이거 나 혼자 못풀겠다! 싶었다. 저번에도 프로그래머스에서 지뢰찾기 문제를 푼 적이 있었는데 그때도 매우 어렵게 여러블로그 찾아가며 풀었었다. 8방탐색이란걸 해서 풀면 나름 쉽게 풀린다고 한다. 구름에서 제공한 풀이를보면 dx/dy 탐색법을 사용하면 된다고 한다. 하지만 dx/dy 탐색법이란걸 봐도 이해가 잘 안가서 나만의 방법으로 했다. 풀이가 되게 간단하고 허접하다. 각 방향별 상,하,좌,우, 대각선 총 8개의 if문이 들어가서 코드가 약간 더럽다. 다음엔 dx/dy 탐색법을 사용해 볼거라고 다짐해보며 일단 현재 풀이의 만족하기로 했다.

 

[결과 코드]

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

class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		int[][] arr = new int[N][N];
		
		for(int i=0;i<N;i++){
			st = new StringTokenizer(br.readLine(), " ");
			for(int j=0;j<N;j++){
				if(Integer.parseInt(st.nextToken())==1) {
					arr[i][j] = -1;
				} else {
					arr[i][j] = 0;
				}
			}
		}
		for(int i=0;i<N;i++){
			int score = 0;
			for(int j=0;j<N;j++){
				if(arr[i][j]==0){
					if(i-1>=0){
						if(arr[i-1][j]==-1) arr[i][j]++;
					}
					if(i+1<N){
						if(arr[i+1][j]==-1) arr[i][j]++;
					}
					if(j-1>=0){
						if(arr[i][j-1]==-1) arr[i][j]++;
					}
					if(j+1<N){
						if(arr[i][j+1]==-1) arr[i][j]++;
					}
					if(i-1>=0 && j-1>=0){
						if(arr[i-1][j-1]==-1) arr[i][j]++;
					}
					if(i-1>=0 && j+1<N){
						if(arr[i-1][j+1]==-1) arr[i][j]++;
					}
					if(i+1<N && j-1>=0){
						if(arr[i+1][j-1]==-1) arr[i][j]++;
					}
					if(i+1<N && j+1<N){
						if(arr[i+1][j+1]==-1) arr[i][j]++;
					}
				}
			}
		}
		
		int answer = 0;
		for(int i=0;i<N;i++){
			for(int j=0;j<N;j++){
				if(arr[i][j]==K) {
					answer++;
				}
			}
		}
		System.out.println(answer);
	}
}

+ Recent posts