๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 10157_์ž๋ฆฌ๋ฐฐ์ •

๋ฟŒ์•ผ._. 2024. 5. 1. 23:45

Silver IV

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/10157)

< ์ž๋ฆฌ๋ฐฐ์ • >

 

๋ฌธ์ œ ํ’€์ด 

 

์™ผ์ชฝ์•„๋ž˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์œ„, ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜, ์™ผ์ชฝ ์ˆœ์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉด์„œ ์ขŒ์„ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

 my solution (Java)

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

public class _10157_ { // ์ž๋ฆฌ๋ฐฐ์ •

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(bf.readLine());

		int c = Integer.parseInt(st.nextToken());
		int r = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(bf.readLine());

		if (c * r < k) {
			bw.write("0");
		} else {
			boolean arr[][] = new boolean[r][c];

			int x = r - 1, y = 0;
			int num = 1;
			arr[x][y] = true;

			int dx[] = { -1, 0, 1, 0 };
			int dy[] = { 0, 1, 0, -1 };
			int idx = 0;
			while (true) {
				if (num == k) {
					bw.write((y+1)+ " " + (r-x));
					break;
				}

				if (x + dx[idx] < 0 || x + dx[idx] >= r || y + dy[idx] < 0 || y + dy[idx] >= c
						|| arr[x + dx[idx]][y + dy[idx]]) {
					idx += 1;
					if (idx == 4) {
						idx = 0;
					}
				}
				x += dx[idx];
				y += dy[idx];
				arr[x][y] = true;
				num += 1;
			}
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
c, r, k : ๊ฒฉ์ž ํฌ๊ธฐ, ๋Œ€๊ธฐ ๋ฒˆํ˜ธ
arr : ๋Œ€๊ธฐ๋ฒˆํ˜ธ ๋ฐฐ์ • ์—ฌ๋ถ€
x , y : ํ˜„์žฌ ์œ„์น˜
num : ํ˜„์žฌ ๋ฒˆํ˜ธ
dx, dy : ์ƒํ•˜์ขŒ์šฐ
idx : ์ด๋™ ๋ฐฉํ–ฅ

 

๊ฒฉ์ž์˜ ํฌ๊ธฐ, ๋Œ€๊ธฐ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๋Œ€๊ธฐ๋ฒˆํ˜ธ๊ฐ€ ๊ฒฉ์ž์— ๋ฐฐ์ •ํ•  ์ˆ˜ ์—†๋Š” ๋ฒˆํ˜ธ๋ผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋ฐฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒˆํ˜ธ๋ผ๋ฉด ๊ฒฉ์ž์— 1๋ถ€ํ„ฐ ๊ฐ’์„ ๋ฐฐ์ •ํ•˜๋ฉฐ ์ขŒ์„๋ฒˆํ˜ธ๋ฅผ ๊ตฌํ•œ๋‹ค. ์™ผ์ชฝ ์•„๋ž˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด x, y๋ฅผ ๊ฐ๊ฐ r-1๊ณผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. arr [x][y]๋ฅผ true๋กœ ๋ฐ”๊ฟ” ๋ฐฐ์ • ์™„๋ฃŒ๋กœ ์ €์žฅํ•œ๋‹ค. k๋ฒˆ์„ ๋ฐฐ์ •ํ•  ์ž๋ฆฌ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

ํ˜„์žฌ ๋ฐฐ์ •ํ•  ๊ฐ’์ธ num์ด ๋Œ€๊ธฐ๋ฒˆํ˜ธ k๊ณผ ์ผ์น˜ํ•˜๋‹ค๋ฉด ๋ฐฐ์ •๋  ์ขŒ์„ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ (y+1, r-x)๋ฅผ ์ถœ๋ ฅํ•˜๋ฉฐ ์ข…๋ฃŒํ•œ๋‹ค. ๋งŒ์•ฝ num๊ณผ k๊ฐ’์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด ํ˜„์žฌ ์ด๋™๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•  ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜์—ฌ ๊ฒฉ์ž ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜, ์ด๋ฏธ ๋ฐฐ์ •๋œ ๊ณณ์ด๋ผ๋ฉด ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์ค€๋‹ค. ํ˜„์žฌ ์ด๋™ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•œ ํ›„ arr[x][y]๋ฅผ true๋กœ ์ €์žฅํ•˜๊ณ  num ๊ฐ’์„ 1 ๋”ํ•ด์ค€๋‹ค.


* ์ฒ˜์Œ์— k ๊ฐ’์ด 1์ผ ๋•Œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.