Dazzling 개발 노트
[백준] 17829 - 222-풀링(Java) 본문
[백준] 17829 - 222-풀링 (Java)
문제
https://www.acmicpc.net/problem/17829
풀이
2*2 형태로 잘라서 배열 정렬 후 2번째 큰 숫자들만 뽑아서 새로운 배열을 만드는 방식으로 풀었다.
Arrays.sort를 써도 되나,,, 하면서도 빨리 완성이나 해보고 싶어서 일단 사용함.
근데 이 방법의 정렬은 기본이 오름차순이라 당연히 Collections.사용해서 내림차순으로 변경하려 했는데,
생각해 보니 굳이 내림차순으로 바꾸지 않고 인덱스를 반대로 보면 됐다.
참고한 풀이에선 원래 처음 arr를 덮어 씌워서 풀었던데
난 오히려 헷갈려서 tempArr를 별도로 선언하여 풀었다.
코드
import java.io.*;
import java.util.*;
public class Main {
static int[][] arr;
static int N, M;
static int[][] tempArr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer str;
N = Integer.parseInt(br.readLine());
arr = new int [N][N];
for (int i=0; i<N; i++) {
str = new StringTokenizer(br.readLine(), " ");
for (int j=0; j<N; j++) {
arr[i][j] = Integer.parseInt(str.nextToken());
}
}
func(N);
System.out.println(arr[0][0]);
}
static void func(int N) {
if (N == 1) return;
tempArr = new int[N/2][N/2];
for (int x=0; x<N; x+=2) {
for (int y=0; y<N; y+=2) {
int[] temp = {arr[x][y], arr[x][y+1], arr[x+1][y], arr[x+1][y+1]};
Arrays.sort(temp); //오름차순 정렬, 2번째 큰 수의 index는 2
tempArr[x/2][y/2] = temp[2];
}
}
arr = tempArr;
func(N/2);
}
}
후기
접근도 잘 하고 꽤 쉽게 풀었다고 생각했는데, temp 부분에 넣을 때 살짝 꼬였다.
처음엔 dir배열로 해서 x축, y축 이동하듯이 방향 배열을 써볼까 했는데 그냥 1더하고 안더하고 하면 쉽게 풀 수 있는 것이었당...ㅎ
Commit
https://github.com/allrightDJ0108/CodingTestStudy/commit/99ae7ab0c0c88cbf19d0ac2e52d34569251c8772
참고
https://kwoncorin.tistory.com/46