슈콩

[BOJ] 17140 이차원 배열과 연산 본문

Algorithms/Baekjoon

[BOJ] 17140 이차원 배열과 연산

shukong 2025. 12. 7. 22:29

 

 

 

[문제]

https://www.acmicpc.net/problem/17140

 

 

[소스 코드]

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

public class Main {
	static int n,m;
	static int[][] map;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int r = Integer.parseInt(st.nextToken());
		int c = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		map = new int[101][101];
		n = 3; m = 3;
		for(int i=1;i<=3;i++) {
			st = new StringTokenizer(br.readLine());
			for(int j=1;j<=3;j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		int result = 0;
		while(result<=100) {
			if(map[r][c]==k) {
				System.out.println(result);
				return;
			}
			boolean transpose = false;
			if(n<m) {
				transpose();
				transpose = true;
			}
			for(int i=1;i<=n;i++) {
				freqSort(map[i]);
			}
			if(transpose) {
				transpose();
			}
			result++;
		}
		System.out.println(-1);
	}
	private static void transpose() {
		int max = Math.max(n, m);
		for(int i=1;i<=max;i++) {
			for(int j=i+1;j<=max;j++) {
				int temp = map[i][j];
				map[i][j] = map[j][i];
				map[j][i] = temp;
			}
		}
		int temp = n;
		n = m;
		m = temp;
	}
	private static void freqSort(int[] arr) {
		int[] freq = new int[101];
		for(int i=1;i<=m;i++) {
			if(arr[i]>0) freq[arr[i]]++;
		}
		List<int[]> list = new ArrayList<>();
		for(int i=1;i<=100;i++) {
			if(freq[i]>0) {
				list.add(new int[] {i,freq[i]});
			}
		}
		Collections.sort(list,(a,b)->{
			if(a[1]==b[1]) return a[0] - b[0];
			else return a[1] - b[1];
		});
		int idx = 0;
		for(int[] curr : list) {
			if(idx==100) break;
			arr[++idx] = curr[0];
			arr[++idx] = curr[1];
		}
		m = Math.max(m, idx);
		for(int i=idx+1;i<=m;i++) {
			arr[i] = 0;
		}
	}
}

 

전치를 하는 경우, 행과 열의 길이가 같도록 조정 후 전치 (전부 가능)

'Algorithms > Baekjoon' 카테고리의 다른 글

[BOJ] 17779 게리멘더링 2  (0) 2025.12.08
[BOJ] 17142 연구소3  (3) 2025.12.07
[BOJ] 17143 낚시왕  (0) 2025.12.06
[BOJ] 17144 미세먼지 안녕!  (0) 2025.12.06
[BOJ] 16236 아기 상어  (0) 2025.12.06