๐•ƒ๐•ฆ๐•„๐•š๐•ฃ

ใ€ŒโŒจ๏ธแด„sใ€PS/๋ฐฑ์ค€_์ˆ˜ํ•™&๊ตฌํ˜„

[Baekjoon/๋ฐฑ์ค€][1913][C/C++] ๋‹ฌํŒฝ์ด

by ๋ฃจ๋ฐ€๐•ƒ๐•ฆ๐•„๐•š๐•ฃ2023. 1. 19.
728x90
๋ฐ˜์‘ํ˜•
ใ€Ž๋ชฉ์ฐจใ€
0. ๊ฐœ์š”

1. ๋ฌธ์ œ
2. ํ’€์ด
3. ์ฝ”๋“œ

0. ๊ฐœ์š”

2์ฐจ์› ๋ฐฐ์—ด ๋ฌธ์ œ ์ค‘์— ๊ฐ€์žฅ ํ’€์–ด๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ๋ฌธ์ œ. ์ฒ˜์Œ ์ฝ”๋”ฉ ๋ฐฐ์šธ ๋•Œ ์ด ๋ฌธ์ œ๋ฅผ ๋ดค์—ˆ๋Š”๋ฐ, ๊ทธ๋•Œ ๋ชป ํ’€์–ด๋ณด๊ณ  ์ด์ œ์•ผ ์ƒ๊ฐ๋‚˜์„œ ํ’€์–ด๋ณธ๋‹ค.

1. ๋ฌธ์ œ

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

 

1913๋ฒˆ: ๋‹ฌํŒฝ์ด

N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ํ‘œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ ์ค„์— N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ํ•œ ์นธ์”ฉ ๋„์–ด์„œ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋ฉฐ, ์ž๋ฆฟ์ˆ˜๋ฅผ ๋งž์ถœ ํ•„์š”๊ฐ€ ์—†๋‹ค. N+1๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ๋ฐ›์€ ์ž์—ฐ์ˆ˜์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜๋ฅผ ํ•œ ์นธ ๋„์–ด์„œ

www.acmicpc.net

[๋ฌธ์ œ]

ํ™€์ˆ˜์ธ ์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์ง€๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด 1๋ถ€ํ„ฐ N2๊นŒ์ง€์˜ ์ž์—ฐ์ˆ˜๋ฅผ ๋‹ฌํŒฝ์ด ๋ชจ์–‘์œผ๋กœ N×N์˜ ํ‘œ์— ์ฑ„์šธ ์ˆ˜ ์žˆ๋‹ค.

9 2 3
8 1 4
7 6 5

 

25 10 11 12 13
24 9 2 3 14
23 8 1 4 15
22 7 6 5 16
21 20 19 18 17

N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋Ÿฌํ•œ ํ‘œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋˜ํ•œ N2 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์ขŒํ‘œ๋„ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด N=5์ธ ๊ฒฝ์šฐ 6์˜ ์ขŒํ‘œ๋Š” (4,3)์ด๋‹ค.

[์ž…๋ ฅ]

์ฒซ์งธ ์ค„์— ํ™€์ˆ˜์ธ ์ž์—ฐ์ˆ˜ N(3 ≤ N ≤ 999)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์œ„์น˜๋ฅผ ์ฐพ๊ณ ์ž ํ•˜๋Š” N2 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ฃผ์–ด์ง„๋‹ค.

[์ถœ๋ ฅ]

N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ํ‘œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ ์ค„์— N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ํ•œ ์นธ์”ฉ ๋„์–ด์„œ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋ฉฐ, ์ž๋ฆฟ์ˆ˜๋ฅผ ๋งž์ถœ ํ•„์š”๊ฐ€ ์—†๋‹ค. N+1๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ๋ฐ›์€ ์ž์—ฐ์ˆ˜์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜๋ฅผ ํ•œ ์นธ ๋„์–ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.

[์˜ˆ์ œ ์ž…๋ ฅ 1]

7
35

[์˜ˆ์ œ ์ถœ๋ ฅ 1]

49 26 27 28 29 30 31
48 25 10 11 12 13 32
47 24 9 2 3 14 33
46 23 8 1 4 15 34
45 22 7 6 5 16 35
44 21 20 19 18 17 36
43 42 41 40 39 38 37
5 7

2. ํ’€์ด

์ฝ”๋“œ ์ˆœ์„œ๋Œ€๋กœ ํ’€์ด๋ฅผ ํ•ด๋ณด๊ฒ ๋‹ค.

 

[n, key๊ฐ’ ์ž…๋ ฅ ๋ฐ›์Œ]

N์€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ์ž์—ฐ์ˆ˜.

key๋Š” ์œ„์น˜๋ฅผ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ž์—ฐ์ˆ˜.

 

[2์ฐจ์› ๋™์  ๋ฐฐ์—ด ํ• ๋‹น]

C์—์„œ๋Š” 2์ฐจ์› ๋™์  ๋ฐฐ์—ด ํ• ๋‹น์„ ์œ„ํ•ด ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•œ๋‹ค. ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

(์—ฌ๊ธฐ์„œ ์•ฝ๊ฐ„์˜ ๋ณ€ํ˜•์„ ๊ฑฐ์น˜๋ฉด, ๋™์  ํ• ๋‹น์„ ํ•ด์ œํ•˜๊ธฐ ์ข€ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜๋‹จ ๋งํฌ ์ฐธ์กฐ.)

https://codeng.tistory.com/8

 

[c์–ธ์–ด] 2์ฐจ์› ๋ฐฐ์—ด ๋™์  ํ• ๋‹นํ•˜๊ธฐ

c์–ธ์–ด์—์„œ 2์ฐจ์›๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. int arr[6][8]; ๊ทธ๋Ÿฌ๋ฉด ๊ฐ€๋กœ 8, ์„ธ๋กœ 6์˜ 2์ฐจ์› ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€๋กœ์˜ ํฌ๊ธฐ์™€ ์„ธ๋กœ์˜ ํฌ๊ธฐ๋ฅผ ์ปดํŒŒ์ผ ์ด์ „ ์‹œ๊ฐ„์— ๋ฏธ๋ฆฌ ์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์‚ฌ

codeng.tistory.com

[๋‹ฌํŒฝ์ด ์ฑ„์›Œ ๋„ฃ๊ธฐ]

์˜ค๋Š˜ ์ฝ”๋”ฉ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„.

 

๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™” ํ•œ ๊ฐ’๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž. ์ฒ˜์Œ ๋ฐฐ์—ด ์ธ๋ฑ์Šค์˜ ์‹œ์ž‘์ ์€ ๋ฐฐ์—ด์˜ ์ค‘์‹ฌ์ด๋ฏ€๋กœ, ์„ธ๋กœ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” col๊ณผ, ๊ฐ€๋กœ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” row์—, ๊ฐ๊ฐ N/2๊ฐ’์„ ๋Œ€์ž…ํ•œ๋‹ค. num๊ฐ’์€ ๋ฐฐ์—ด ์•ˆ์— ์ž…๋ ฅ๋  ์ˆซ์ž์ด๋‹ค. (1, 2, 3, ... $N^2$๊นŒ์ง€ ์ฆ๊ฐ€ํ•œ๋‹ค.) 

 

๋‹ฌํŒฝ์ด์˜ ์›๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, 'โ‘ ๋ฐฐ์—ด์— ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค. -> โ‘ก๋ฐฐ์—ด ์ธ๋ฑ์Šค ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.' ์ด 2๊ฐ€์ง€ ํ–‰์œ„์˜ ๋ฐ˜๋ณต์ด๋‹ค. 'โ‘ ๋ฐฐ์—ด์— ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค.' ๋ถ€๋ถ„์€ ๋ณ„๋กœ ์–ด๋ ค์šธ ๊ฒŒ ์—†์ง€๋งŒ, 'โ‘ก๋ฐฐ์—ด ์ธ๋ฑ์Šค ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.' ํŒŒํŠธ๊ฐ€ ๋จธ๋ฆฌ ์•„ํ”„๋‹ค. ์ธ๋ฑ์Šค ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 'โ‘ก-โ‘ด์œ„,์˜ค๋ฅธ์ชฝ,์•„๋ž˜,์™ผ์ชฝ ๋ฐฉํ–ฅ ์ค‘ ํ•˜๋‚˜๋กœ โ‘ก-โ‘ต1์นธ,  2์นธ, 3์นธ, ... ์ค‘ ์ƒํ™ฉ์— ๋งž๊ฒŒ ํ•ด๋‹น ์นธ์ˆ˜๋ฅผ ์ด๋™ํ•œ๋‹ค.' ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. 

 

U=Up, R=Right, D=Down, L=Left๋ผ ํ•˜์ž. ๋‹ฌํŒฝ์ด์˜ ์ด๋™ ๋ฐฉํ–ฅ ์›๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, U - R - D - D - L - L - U - U - U - R - R - R - D - D -D -D - ... ํ•ด์„œ U๊ฐ€ 1๋ฒˆ, R์ด 1๋ฒˆ, D๊ฐ€ 2๋ฒˆ, L์ด 2๋ฒˆ, U๊ฐ€ 3๋ฒˆ, R์ด 3๋ฒˆ, D๊ฐ€ 4๋ฒˆ, ... ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ∴ URDL ์ˆœ์„œ๋Œ€๋กœ U1๋ฒˆ, R1๋ฒˆ, D2๋ฒˆ, L2๋ฒˆ, U3๋ฒˆ, R3๋ฒˆ, D4๋ฒˆ, L4๋ฒˆ, ... ์”ฉ ์ด๋™ํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๋ฉด ๋œ๋‹ค. (๊ฐ™์€ ์ˆซ์ž๋ฅผ 2๋ฒˆ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ, 2๋ฒˆ์งธ for๋ฌธ์˜ (URDL + 1) / 2 ๋ฅผ ์ด์šฉํ–ˆ๋‹ค.)

 

์ดํ›„ ํ•˜๋‹จ์˜ for๋ฌธ 2๊ฐœ๋ฅผ ์ž˜ ๋งž๋ฌผ๋ฆฌ๊ฒŒ ์„ค๊ณ„ํ•ด ์ฃผ๋ฉด, ์ž˜ ์ž‘๋™๋œ๋‹ค. (์‚ฌ์‹ค ์ด ๋ถ€๋ถ„์€ ๋ง๋กœ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค...ใ… )

 

[์ถœ๋ ฅ_๋‹ฌํŒฝ์ด] & [์ถœ๋ ฅ_Key์˜ ์œ„์น˜]

๋ฌธ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

 

[๋งˆ๋ฌด๋ฆฌ]

๋™์  ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ–ˆ์œผ๋ฏ€๋กœ, ๋งˆ์ง€๋ง‰์—๋Š” ๋ฐ˜๋“œ์‹œ ๋™์  ํ• ๋‹น์„ ํ•ด์ œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

3. ์ฝ”๋“œ

#pragma warning (disable:4996)
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
	/* N, key๊ฐ’ ์ž…๋ ฅ ๋ฐ›์Œ */
	int N; scanf("%d", &N);
	int key; scanf("%d", &key);

	/* 2์ฐจ์› ๋™์ ๋ฐฐ์—ด ํ• ๋‹น */
	int** arr = (int**)calloc(N, sizeof(int*));
	for (int i = 0; i < N; i++)
		arr[i] = (int*)calloc(N, sizeof(int));

	/* ๋‹ฌํŒฝ์ด ์ฑ„์›Œ๋„ฃ๊ธฐ */
	int col = N / 2;
	int row = N / 2;
	int num = 1;

	for (int URDL = 1; num <= N * N; URDL++) { //URDL์€ Up Right Down Left๋ฅผ ์˜๋ฏธ
		for (int i = 1; i <= (URDL + 1) / 2; i++) {
			/* part1. ์“ฐ๊ธฐ */
			arr[col][row] = num++;

			/* part2. ์œ„์น˜ */
			/* UP */
			if (URDL % 4 == 1)
				col--;
			/* RIGHT */
			else if (URDL % 4 == 2)
				row++;
			/* DOWN */
			else if (URDL % 4 == 3)
				col++;
			/* LEFT */
			else if (URDL % 4 == 0)
				row--;
		}
	}

	/* ์ถœ๋ ฅ_๋‹ฌํŒฝ์ด */
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++)
			printf("%d ", arr[i][j]);
		printf("\n");
	}

	/* ์ถœ๋ ฅ_key๊ฐ’ ์œ„์น˜ */
	for (int i = 0; i < N; i++)
		for (int j = 0; j < N; j++)
			if (key == arr[i][j])
				printf("%d %d", i + 1, j + 1);
		
	/* ๋งˆ๋ฌด๋ฆฌ */
	for (int i = 0; i < N; i++)
		free(arr[i]);
	free(arr);

	return 0;
}
728x90
๋ฐ˜์‘ํ˜•