๋ฌธ์ œ

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

์„ค๋ช…

์˜ค๋Š˜๋ฌธ์ œ๋Š” ๋‹ฌํŒฝ์ด๋‹ค.

Source : GIPHY

์•„๋‹ˆ ๊ทธ๊ฑฐ ๋ง๊ณ 

๋ฌธ์ œ๋ฅผ ์š”์•ฝํ•˜์ž๋ฉด

์‚ฌ์šฉ์ž๋กœ ๋ถ€ํ„ฐ ์ž…๋ ฅ ๋‘๊ฐœ๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ ์ฒซ๋ฒˆ์จฐ ์ˆซ์ž N์€ ๋ฌด์กฐ๊ฑด ํ™€์ˆ˜๋งŒ ์ฃผ์–ด์ง„๋‹ค๋Š” ํ•œ์ • ์กฐ๊ฑด์ด ์ฃผ์›Œ ์กŒ์œผ๋ฉฐ, ์ด๋ฅผ ์ด์šฉํ•ด N*Nํ‘œ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์ค‘์•™์—์„œ๋ถ€ํ„ฐ 1๋กœ ์‹œ์ž‘ํ•˜์—ฌ ํžˆ์˜ค์Šค๋ชจ์–‘์œผ๋กœ ๋Œ์•„๋‚˜์˜ค๋ฉด์„œ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ค๋„๋ก ํ‘œ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ํ•ด์•ผํ•˜๊ณ  ๋‘๋ฒˆ์งธ ์ˆซ์ž๋Š” ๊ทธ ํ‘œ ์•ˆ์—์„œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ˆซ์ž๋กœ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ˆซ์ž์˜ ํ–‰๊ณผ ์—ด(์ขŒํ‘œ๊ฐ’)์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

์ผ๋‹จ ์ด๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ๋งจ์ฒ˜์Œ์— ๋“ค์—ˆ๋˜ ์ƒ๊ฐ์€ ๋‹ฌํŒฝ์ด๋ชจ์–‘์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฒฝ๋งŒ ๋„˜์–ด์„ ๋‹ค๋ฉด ๋‚˜๋จธ์ง€๋Š” ์ˆ˜์›”ํ•˜๊ฒŒ ํ’€๋ฆด๊ฑฐ๋ผ๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋”ฉ์„ ํ•˜๋ฉด์„œ ๋Š๋‚€๊ฑด ๊ทธ.๋†ˆ.์˜ ๋‹ฌํŒฝ์ด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

๋จผ์ € ๋น ๋ฅธ ์„ค๋ช…์„ ์œ„ํ•ด์„œ ํ’€์†Œ์Šค๋ฅผ ๋ฐ”๋กœ ๊ณต๊ฐœํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> // ๊ธฐ๋ณธ ์ž…์ถœ๋ ฅ์„ ์œ„ํ•œ ํ—ค๋”
#include <stdlib.h> // ์ด ์ฝ”๋“œ์—์„œ๋Š” abs ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ—ค๋”
#include <math.h>  // round ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ—ค๋”

int path[2],found[2]; // path = ํ˜„์žฌ ์ขŒํ‘œ, found = ์ฐพ์€ ์ˆ˜์˜ ์ขŒํ‘œ
int snail[999][999]; // ๋‹ฌํŒฝ์ด ๋ชจ์–‘ ํ‘œ(๋ฐฐ์—ด) -- [ํ–‰] ๊ณผ [์—ด]
int n, search, max_size, center;  // n = ํ‘œ ํ•œ๋ณ€ ๊ธธ์ด, search = ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ˆ˜, max_size = ๋‹ฌํŒฝ์ด ๋ ์ˆซ์ž, center = ์ค‘์•™ ์ขŒํ‘œ(์‹œ
int num = 1; // 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜
int floor_ = 1; // ์ค‘์‹ฌ์„ ๊ธฐ์ค€์œผ๋กœ ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ธธ์ด

enum arrow{Up=0, Right, Down, Left}; // Up = 0, Right = 1, Down = 2, Left = 3
enum arrow direction = Up; // ์ฒ˜์Œ ์‹œ์ž‘ : Up

int main()
{
	//์‚ฌ์šฉ์ž๋กœ ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›๊ธฐ
	scanf("%d", &n); 
	scanf("%d", &search);

	max_size = n * n; // ๋‹ฌํŒฝ์ด ๋ ์ˆซ์ž = n^2
	center = (n / 2); // ์ค‘์•™์ขŒํ‘œ : n/2(์†Œ์ˆ˜์  ์ƒ๋žต)
	path[0] = path[1] = center; // ์‹œ์ž‘์ ์„ ์ค‘์•™ ์ขŒํ‘œ๋กœ ์„ค์ •

	while (num <= max_size) //๋‹ฌํŒฝ์ด ๋งˆ์ง€๋ง‰ ์ˆซ์ž๊ฐ€ ์ž…๋ ฅ๋˜์–ด์งˆ๋•Œ๊นŒ์ง€ ์ž…๋ ฅ
	{
		if (num == (int)(round(pow(((2 * floor_) + 1), 2)))) // ํ•œ์ธต์˜ ์ž…๋ ฅ์ด ๋๋‚˜๋Š”์ ์— ๋„๋‹ฌ(์˜ˆ : 9,25,...
			direction = Up; // ์œ„๋กœ ๊ฐ€๋Š” ๋ฐฉํ–ฅ ์œ ์ง€ํ•˜์—ฌ ๋‹ค์Œ ์ธต์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ํ•˜๊ธฐ
		else if (num == (int)(round(pow(((2 * floor_) + 1), 2))) + 1) //์ธต์˜ ๋๋ถ€๋ถ„์ด ์•„๋‹ˆ๋ผ ๋๋ถ€๋ถ„ ๊ทธ ๋‹ค์Œ ์ ์ด๋ฉด
		{
			floor_++; // ์ธต์ˆ˜ ๋ณ€์ˆ˜๋ฅผ 1 ์ฆ๊ฐ€
			direction = Right; // ๋‹ค์‹œ ๋ฐฉํ–ฅ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‹€๊ธฐ
		}
// ์ด ์ดํ›„๋ถ€ํ„ฐ์˜ ์กฐ๊ฑด๋ฌธ์€ ๊ฐ ๋ชจ์„œ๋ฆฌ ์ ์— ๋ด‰์ฐฉํ–ˆ์„๋•Œ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ์œ„ํ•œ ์†Œ์Šค
		else if (abs(center - path[0]) == floor_ && direction == Up) //ํ˜„์žฌ ๊ฐ™์€์ธต์—์„œ ๋” ์œ„๋กœ ๋ชป๋‚˜์•„๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Right;  //์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
		else if (abs(center - path[0]) == floor_ && abs(center - path[1]) == floor_ && direction == Right) // ๊ฐ™์€์ธต์—์„œ ๋”์ด์ƒ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ชป๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Down;  //์•„๋žซ์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
		else if (abs(center - path[0]) == floor_ && direction == Down) // ๋”์ด์ƒ ์•„๋žซ์ชฝ์œผ๋กœ ๋ชป๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Left;  //์™ผ์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
		else if (abs(center - path[0]) == floor_ && abs(center - path[1]) == floor_ && direction == Left) // ๋”์ด์ƒ ์™ผ์ชฝ์œผ๋กœ ๋ชป๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Up; // ์œ—์ชฝ์œผ๋กœ ๊บฝ๊ธฐ

		snail[path[0]][path[1]] = num; // ๋‹ฌํŽญ์ด ๋ณ€์ˆ˜์— ์ˆซ์ž ์ž…๋ ฅ

		//ํ˜น์‹œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ˆซ์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ค๋ฉด found ๋ณ€์ˆ˜์— ํ–‰๊ณผ, ์—ด ์ˆซ์ž๊ฐ’ ์ €์žฅํ•˜๊ธฐ
		found[0] = num == search ? path[0] + 1 : found[0];
		found[1] = num == search ? path[1] + 1 : found[1];
		//์ขŒํ‘œ๋ฅผ ์ด๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด๋ฌธ
		switch (direction)
		{
		case Up:  //๋ฐฉํ–ฅ์ด ์œ—์ชฝ์ผ๋•Œ
			path[0]--;
			break;
		case Right:  //๋ฐฉํ–ฅ์ด ์˜ค๋ฅธ์ชฝ์ผ๋•Œ
			path[1]++;
			break;
		case Down:  //๋ฐฉํ–ฅ์ด ์•„๋žซ์ชฝ์ผ๋•Œ
			path[0]++;
			break;
		case Left:  //๋ฐฉํ–ฅ์ด ์™ผ์ชฝ์ผ๋•Œ
			path[1]--;
			break;
		}
		num++; // ๋‹ค์Œ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•ด num ๋ณ€์ˆ˜ 1 ์ฆ๊ฐ€
	}
	for (int i = 0; i < n; i++) //๋‹ฌํŒฝ์ด ๋ณ€์ˆ˜๊ฐ€ ์›์„ฑ๋œ ํ›„ ๋‹ฌํŒฝ์ด ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ
	{
		for (int j = 0; j < n; j++)
			printf("%d ", snail[i][j]);
		printf("\n");
	}
	printf("%d %d", found[0], found[1]); // ์ฐพ์€ ์ˆซ์ž๊ฐ€ ์žˆ๋Š” ์ขŒํ‘œ ํ‘œ์‹œ
}

์†Œ์Šค์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์œ„์— ์ ํžŒ ์ฃผ์„์ •๋„๋กœ ์–ด๋Š์ •๋„ ์„ค๋ช…์ด ๋ ๊ฒƒ ๊ฐ™๊ณ  ์ด ์ดํ›„๋ถ€ํ„ฐ๋Š” ์ด ์†Œ์Šค๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•˜๋Š” ํŽธ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

๋จผ์ € ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์‰ฌ์šด ์„ค๋ช…์„ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ํ† ๋ง‰์„ ๋‚ด์–ด ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ฒจ ๋ณด๋„๋ก ํ•ด๋ณด๊ฒ ๋‹ค.

1๏ธโƒฃ

์œ ์ €๋กœ ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›๊ธฐ + ์ตœ๋Œ€ ์‚ฌ์ด์ฆˆ์™€ ์ค‘์•™ ์ขŒํ‘œ๊ฐ’ ์„ค์ •

	scanf("%d", &n); 
	scanf("%d", &search);

	max_size = n * n; // ๋‹ฌํŒฝ์ด ๋ ์ˆซ์ž = n^2
	center = (n / 2); // ์ค‘์•™์ขŒํ‘œ : n/2(์†Œ์ˆ˜์  ์ƒ๋žต)
	path[0] = path[1] = center; // ์‹œ์ž‘์ ์„ ์ค‘์•™ ์ขŒํ‘œ๋กœ ์„ค์ •

2๏ธโƒฃ

ํ•œ ์ธต์˜ ๋๋ถ€๋ถ„์— ๋„๋‹ฌํ•˜์˜€์„๋•Œ ๋‹ค์Œ์ธต์œผ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ๋ฐฉํ–ฅ ์„ค์ • + ๋‹ค์Œ์ธต์˜ ์ฒซ ๋ถ€๋ถ„์— ๋„๋‹ฌํ•˜์˜€์„๋•Œ ๋‹ค์‹œ ๊ทธ์ธต์„ ์ˆœํ™˜ํ•˜๋„๋ก ๋ฐฉํ–ฅ ์„ค์ •

if (num == (int)(round(pow(((2 * floor_) + 1), 2)))) // ํ•œ์ธต์˜ ์ž…๋ ฅ์ด ๋๋‚˜๋Š”์ ์— ๋„๋‹ฌ(์˜ˆ : 9,25,...
			direction = Up; // ์œ„๋กœ ๊ฐ€๋Š” ๋ฐฉํ–ฅ ์œ ์ง€ํ•˜์—ฌ ๋‹ค์Œ ์ธต์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ํ•˜๊ธฐ
		else if (num == (int)(round(pow(((2 * floor_) + 1), 2))) + 1) //์ธต์˜ ๋๋ถ€๋ถ„์ด ์•„๋‹ˆ๋ผ ๋๋ถ€๋ถ„ ๊ทธ ๋‹ค์Œ ์ ์ด๋ฉด
		{
			floor_++; // ์ธต์ˆ˜ ๋ณ€์ˆ˜๋ฅผ 1 ์ฆ๊ฐ€
			direction = Right; // ๋‹ค์‹œ ๋ฐฉํ–ฅ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‹€๊ธฐ
		}

3๏ธโƒฃ

๋‹ฌํŒฝ์ด ๋ณ€์ˆ˜์— ์ˆซ์ž ์ ๊ธฐ

snail[path[0]][path[1]] = num; // ๋‹ฌํŽญ์ด ๋ณ€์ˆ˜์— ์ˆซ์ž ์ž…๋ ฅ

4๏ธโƒฃ

ํ˜„์žฌ ์ขŒํ‘œ์—์„œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ˆซ์ž ๊ฒ€์ƒ‰

//ํ˜น์‹œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ˆซ์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ค๋ฉด found ๋ณ€์ˆ˜์— ํ–‰๊ณผ, ์—ด ์ˆซ์ž๊ฐ’ ์ €์žฅํ•˜๊ธฐ
		found[0] = num == search ? path[0] + 1 : found[0];
		found[1] = num == search ? path[1] + 1 : found[1];

5๏ธโƒฃ

๋ฐฉํ–ฅ์„ ํ‹€์–ด์•ผํ•˜๋Š” ์ง€์ ์ธ์ง€ ๊ฒ€์‚ฌํ•œํ›„ ๋ฐฉํ–ฅ ๋ณ€๊ฒฝ

	... // 
	else if (abs(center - path[0]) == floor_ && direction == Up) //ํ˜„์žฌ ๊ฐ™์€์ธต์—์„œ ๋” ์œ„๋กœ ๋ชป๋‚˜์•„๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Right;  //์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
	else if (abs(center - path[0]) == floor_ && abs(center - path[1]) == floor_ && direction == Right) // ๊ฐ™์€์ธต์—์„œ ๋”์ด์ƒ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ชป๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Down;  //์•„๋žซ์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
	else if (abs(center - path[0]) == floor_ && direction == Down) // ๋”์ด์ƒ ์•„๋žซ์ชฝ์œผ๋กœ ๋ชป๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Left;  //์™ผ์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
	else if (abs(center - path[0]) == floor_ && abs(center - path[1]) == floor_ && direction == Left) // ๋”์ด์ƒ ์™ผ์ชฝ์œผ๋กœ ๋ชป๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Up; // ์œ—์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
	...

6๏ธโƒฃ

๋ฐฉํ–ฅ ํ™•์ธํ›„ ์ขŒํ‘œ๋ฅผ ์ด๋™์‹œํ‚ด

...	
//์ขŒํ‘œ๋ฅผ ์ด๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด๋ฌธ
		switch (direction)
		{
		case Up:  //๋ฐฉํ–ฅ์ด ์œ—์ชฝ์ผ๋•Œ
			path[0]--;
			break;
		case Right:  //๋ฐฉํ–ฅ์ด ์˜ค๋ฅธ์ชฝ์ผ๋•Œ
			path[1]++;
			break;
		case Down:  //๋ฐฉํ–ฅ์ด ์•„๋žซ์ชฝ์ผ๋•Œ
			path[0]++;
			break;
		case Left:  //๋ฐฉํ–ฅ์ด ์™ผ์ชฝ์ผ๋•Œ
			path[1]--;
			break;
		}
num++; // ๋‹ค์Œ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•ด num ๋ณ€์ˆ˜ 1 ์ฆ๊ฐ€
...

์ดˆ๋ก์ƒ‰ ์ˆซ์ž๋Š” ๊ณผ์ •์˜ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ „๋ฐ˜์ ์ธ ๊ณผ์ •์€ ์œ„ ๊ทธ๋ฆผ์„ ํ†ตํ•ด ์–ด๋Š์ •๋„ ์„ค๋ช… ๋  ์ˆ˜ ์žˆ์„ ๋“ฏ ํ•˜๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ค๋ช…์€ ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•œ๋‹ค๊ณ  ํ•ด๋„ ์†Œ์Šค์ฝ”๋“œ์—์„œ ์œ ๋‚œํžˆ ๋ˆˆ์— ๋„๋Š” ๋ถ€๋ถ„์ด ์žˆ์„๊ฑฐ๋‹ค.

if (num == (int)(round(pow(((2 * floor_) + 1), 2)))) // ํ•œ์ธต์˜ ์ž…๋ ฅ์ด ๋๋‚˜๋Š”์ ์— ๋„๋‹ฌ(์˜ˆ : 9,25,...
			direction = Up; // ์œ„๋กœ ๊ฐ€๋Š” ๋ฐฉํ–ฅ ์œ ์ง€ํ•˜์—ฌ ๋‹ค์Œ ์ธต์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ํ•˜๊ธฐ
		else if (num == (int)(round(pow(((2 * floor_) + 1), 2))) + 1) //์ธต์˜ ๋๋ถ€๋ถ„์ด ์•„๋‹ˆ๋ผ ๋๋ถ€๋ถ„ ๊ทธ ๋‹ค์Œ ์ ์ด๋ฉด
		{
			floor_++; // ์ธต์ˆ˜ ๋ณ€์ˆ˜๋ฅผ 1 ์ฆ๊ฐ€
			direction = Right; // ๋‹ค์‹œ ๋ฐฉํ–ฅ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‹€๊ธฐ
		}

์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋œ round() ํ•จ์ˆ˜๋‹ค. roundํ•จ์ˆ˜๋Š” ์ด๋ฆ„์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ ๋ฐ˜์˜ฌ๋ฆผ ํ•จ์ˆ˜์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ

pow(((2 * floor_) + 1), 2))) ๋Š” ๊ฐ์ธต์˜ ๋๋‚˜๋Š” ์ ์˜ ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„์‚ฐ์‹์ด๊ณ  pow()ํ•จ์ˆ˜๋Š” power์˜ ์•ฝ์–ด๋กœ ์–ด๋–ค์ˆ˜์˜ ์ œ๊ณฑ์Šน๊ฐ’์„ ๊ตฌํ• ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ์‹์„ ๋ฐ˜์˜ฌ๋ฆผ ํ•จ์ˆ˜๋กœ ๊ฐ์‹ผ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ?

์ด๋ฒˆ์— ์œ„์™€ ๊ฐ™์€ ์ˆ˜ํ•™์ ์ธ ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ๊ตฌ๊ธ€๋ง์„ ํ•˜๋Š” ๋„์ค‘ pow ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’์ด ์ผ๋ถ€ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋‹ต์ด ์•ˆ๋‚˜์˜ฌ ์ˆ˜ ๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. ๊ตฌ๊ธ€๋ง์„ ํ•ด์„œ ๋‚˜์˜จ ๋ธ”๋กœ๊ทธ์—์„œ ๋‚˜์˜จ ๊ทธ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์˜ˆ๋กœ ์œˆ๋„์šฐ ๋ฒ„์ „ MinGw๋ฅผ ์˜ˆ๋กœ ๋“ค์—ˆ๋‹ค. (์ฐธ๊ณ ๋กœ pow์˜ ๊ฒฐ๊ณผ๊ฐ’์€ Double ํ˜•์œผ๋กœ ๋‚˜์˜จ๋‹ค.)

ํ•ด๋‹น ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ 10.0 ^ 2.0 ์„ ํ• ๋•Œ 100.00์ด ์•„๋‹Œ ํŠน์ • ์ƒํ™ฉ์—์„œ 99๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ชฉ๊ฒฉํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋Š” MinGW์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌํ˜„์˜ ํ—ˆ์ ์ด๋ผ๊ณ  ๋ณด์—ฌ์ง„๋‹ค๊ณ  ํ•œ๋‹ค. ๋ถ€๋™์†Œ์ˆ˜์  ์˜ค์ฐจ๋กœ ์ธํ•ด์„œ ๋ฐœ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ๋ฌผ์ด๊ธด ํ•˜๋‚˜ 100์ด๋ผ๊ณ  ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅํ•œ ์ปดํŒŒ์ผ๋Ÿฌ์— ๊ฒฝ์šฐ ๋ชจ๋‘ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ทธ ์˜ค์ฐจ๋ฅผ ์ธ์ง€ํ•˜๊ณ  ๋”ฐ๋กœ ๋ณด์ •์ž‘์—…์„ ๊ฑฐ์น˜๊ณ  ์ถœ๋ ฅํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋”ฐ๋ผ์„œ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋Š” ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐ˜์˜ฌ๋ฆผ ํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ ์˜ค์ฐจ๋ฅผ ์—†์–˜๋ ค๊ณ  ํ•œ๊ฒƒ์ด๋‹ค.

	... // 
	else if (abs(center - path[0]) == floor_ && direction == Up) //ํ˜„์žฌ ๊ฐ™์€์ธต์—์„œ ๋” ์œ„๋กœ ๋ชป๋‚˜์•„๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Right;  //์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
	else if (abs(center - path[0]) == floor_ && abs(center - path[1]) == floor_ && direction == Right) // ๊ฐ™์€์ธต์—์„œ ๋”์ด์ƒ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ชป๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Down;  //์•„๋žซ์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
	else if (abs(center - path[0]) == floor_ && direction == Down) // ๋”์ด์ƒ ์•„๋žซ์ชฝ์œผ๋กœ ๋ชป๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Left;  //์™ผ์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
	else if (abs(center - path[0]) == floor_ && abs(center - path[1]) == floor_ && direction == Left) // ๋”์ด์ƒ ์™ผ์ชฝ์œผ๋กœ ๋ชป๊ฐ€๋Š” ์ƒํ™ฉ
			direction = Up; // ์œ—์ชฝ์œผ๋กœ ๊บฝ๊ธฐ
	...

๊ทธ๋‹ค์Œ ์ด์†Œ์Šค์—์„œ abs() ํ•จ์ˆ˜๋Š” ์ ˆ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜์ด๋ฉฐ ์ด ํ•จ์ˆ˜๋Š” ๋ณด๋ฉด math.h ํ—ค๋”์— ํฌํ•จ๋˜์–ด ์žˆ์„๊ฑฐ๋ผ๊ณ  ์˜คํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค. ๋‚˜์— ๊ฒฝ์šฐ์—๋„ ๊ทธ๋ ‡๊ฒŒ ์ฐฉ๊ฐํ•˜๊ณ  ๋ฐฑ์ค€์— ์ œ์ถœํ–ˆ๋Š”๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜๋ฅผ ๋ฟœ์–ด๋ƒˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” abs() ํ•จ์ˆ˜์— ๊ฒฝ์šฐ stdlib.h์— ํฌํ•จ๋œ ํ•จ์ˆ˜์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ ˆ๋Œ€๊ฐ’ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•œ ์ด์œ ๋Š” ์ค‘์•™์œผ๋กœ ๋ถ€ํ„ฐ ํ˜„์žฌ ์ขŒํ‘œ๊ฐ€ ๋–จ์–ด์ง„ ์ ˆ๋Œ€์ ์ธ ๊ฐ’์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•จ์ด์—ˆ์œผ๋ฉฐ, ์ด ๊ฐ’์„ ์ด์šฉํ•ด ์ขŒํ‘œ์— ์ธต์ˆ˜๋ฅผ ๊ตฌํ•˜์˜€๋‹ค.

์ธต์ˆ˜?

์•„๊นŒ๋ถ€ํ„ฐ ์ธต์ˆ˜๋ผ๋Š” ๋ง์„ ๊ณ„์† ์–ธ๊ธ‰ํ–ˆ๋Š”๋ฐ ์‰ฝ๊ฒŒ ๋งํ•ด ๊ณผ์ผ์˜ ๊ป์งˆ์„ ์ƒ์ƒํ•˜๋ฉด ์‰ฝ๋‹ค.

์œ„์— ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ์˜ˆ๋ฅผ ๋ณด๋ฉด 1์„ ์ œ์™ธํ•˜๊ณ  2~9๋ฅผ 1์ธต์ด๋ผ ๊ทœ์ •ํ•˜๊ณ  floor_ ๋ณ€์ˆ˜๋„ 1์ด๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ๋ฒˆํ˜ธ ๋งค๊ฒผ์œผ๋ฉฐ, 10~25๋ฅผ 2์ธต์ด๋ผ ๊ทœ์ •ํ•˜์˜€๋‹ค.

ํ›„๊ธฐ

๋‚˜์— ๊ฒฝ์šฐ ์ค‘์‹ฌ์ ์„ ํ•˜๋‚˜ ์ •ํ•˜๊ณ  ์•ˆ์ชฝ์—์„œ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ ๋Œ์•„ ๋‚˜์˜ค๋ฉด์„œ ๋‹ฌํŒฝ์ด๋ฅผ ๋งŒ๋“ค๋„๋ก ํ•˜์˜€์œผ๋‚˜ ๋‚˜์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ์ €๋ฒˆ์— ํ’€์—ˆ๋˜ ์นœ๊ตฌ์— ๊ฒฝ์šฐ ๋ฐ”๊นฅ์ชฝ์—์„œ๋ถ€ํ„ฐ ์•ˆ์ชฝ์œผ๋กœ ์ˆซ์ž๋ฅผ ์ ๋„๋ก ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•˜๋ฉด ๋” ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์•ˆ์„ ํ•˜์˜€๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜์ค‘์— ๊ธฐํšŒ๊ฐ€ ๋œ๋‹ค๋ฉด ๊ทธ๋Ÿฐ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์‹œ ํ’€์–ด๋ณด๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค.