[백준] 17829. 222-풀링 (실버2)

ERror.ASER·2021년 2월 22일
0

백준

목록 보기
26/69
post-thumbnail

백준(실버2) - 17829. 222-풀링 (실버2)



풀이

  1. 입력받기
  2. 2*2로 나누기
  3. 2*2로 나뉜 행렬에서 두번째 값 찾기
  4. 값 넣기
  5. 1*1이 아니면 2번으로 돌아가서 계속 반복하기

위의 순서대로 풀어주면 바로 나온다!
천천히 생각해보고 로직을 써보면 빨리 답을 찾을 수 있게 된다.
요즘 문제풀기 전에 어떻게 풀지 미리 주석으로 쓰고 푸는데, 이런 과정을 거친 후에 문제를 푸니 정답률과 속도가 매우 많이 높아졌다ㅎㅎ

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class BOJ17829 {
	static int n;
	static int[][] map,result;
	static Queue<Integer> temp;
	public static void main(String[] args) throws Exception {
		//1. 입력받기
		//2. 2*2로 나누기
		//3. 2*2로 나뉜 행렬에서 두번째 값 찾기
		//4. 값 넣기
		//5. 1*1이 아니면 2번으로 돌아가서 계속 반복하기
		
		//1. 입력받기
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		map = new int[n][n];
		
		temp = new LinkedList<Integer>();
		
		for(int i=0; i<n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			for(int j=0; j<n; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		while(true) {
			//2. 2*2로 나누기
			for(int i=0; i<n; i+=2) {//0,2,4,6,8
				int[] subMatrix = new int[4];
				
				for(int j=0; j<n; j+=2) {//0,2,4,6,8
					int idx = 0;
					subMatrix[idx++] = map[i][j];
					subMatrix[idx++] = map[i][j+1];
					subMatrix[idx++] = map[i+1][j];
					subMatrix[idx++] = map[i+1][j+1];
					//3. 2*2로 나뉜 행렬에서 두번째 값 찾기
					Arrays.sort(subMatrix);
					temp.add(subMatrix[2]);
				}
			}
						
			map = new int[n/2][n/2];
			//4. 값 넣기
			for(int j=0; j<n/2; j++) {
				for(int i=0; i<n/2; i++) {
					map[j][i] = temp.poll();
				}
			}
			//5. 1*1이 아니면 2번으로 돌아가서 계속 반복하기
			n /= 2;
			if(map.length == 1) break;
		}
		System.out.println(map[0][0]);

	}

}
profile
지우의 블로그

0개의 댓글