뮁이의 개발새발

[JAVA] 백준 10157 자리배정 본문

Algorithm

[JAVA] 백준 10157 자리배정

뮁뮁이 2021. 8. 28. 12:59

내가 별로 좋아하지 않는 회오리 모양의 배열 칸채우기 ,,, 더군다나 이번에는 x,y방향도 반대고, (보통은 행열인데 야는 열행으로 찾으라함..) 배열 인덱스도 맨밑왼쪽부터 1,1 이렇게 시작하는 바람에 조금 헷갈렸다 ..... 그래도 이런유형 여러번 풀어보니까 처음보단 할만한듯..ㅠ

이런식으로 한줄 채울때마다 한칸씩 덜가서 채운다고 생각하면 됨 ㅎㅎ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class bj10157 {
	static int cnt = 1;
	static int[][] map;
	static int R, C;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(in.readLine());
		C = Integer.parseInt(st.nextToken());
		R = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(in.readLine());

		map = new int[R][C];

		int row = R;
		int col = C;
		int start = 0;

		while (true) {
			if (row <= 0 || col <= 0) {
				break;
			}
			numbering(row, col, start);
			row = row - 1;
			col = col - 1;
			start++;
		}

		int[] answer = find(K);
		if (answer == null) {
			System.out.println(0);
		} else {
			System.out.println((answer[1] + 1) + " " + (answer[0] + 1));
		}

	}

	static void numbering(int row, int col, int start) {
		for (int i = start; i < row - 1; i++) {
			if (map[i][start] != 0)
				break;
			map[i][start] = cnt;
			cnt++;
		}

		for (int i = start; i < col - 1; i++) {
			if (map[row - 1][i] != 0)
				break;
			map[row - 1][i] = cnt;
			cnt++;
		}

		for (int i = row - 1; i > start; i--) {
			if (map[i][col - 1] != 0)
				break;
			map[i][col - 1] = cnt;
			cnt++;
		}
		for (int i = col - 1; i > start; i--) {
			if (map[start][i] != 0)
				break;
			map[start][i] = cnt;
			cnt++;
		}
	}

	static int[] find(int n) {
		for (int i = 0; i < R; i++) {
			for (int j = 0; j < C; j++) {
				if (map[i][j] == n) {
					return new int[] { i, j };
				}
			}
		}
		return null;
	}
}

 

 

Comments