문제 링크입니다: https://www.acmicpc.net/problem/15722
예전에 열혈 C 프로그래밍 연습문제를 풀어본 적이 있다면 쉽게 풀 수 있는 문제였습니다.
y와 x를 move만큼 이동하고(단, 1초에 1칸씩) move를 증가시킨 다음 반복하면 되는 문제였습니다.
주의할 점은 y와 x 좌표를 이동한 다음 부호를 바꾼 다음 y와 x 좌표를 이동해야한다는 점이였습니다.
#include <iostream>
using namespace std;
typedef struct
{
int x, y;
}coord;
coord snail(int n)
{
coord point{ 0, 0 };
bool sign = true; //sign true -> 양수, sign false -> 음수
int move = 1; //처음엔 1씩 움직임
while (1)
{
//y 한번, x 한번 move만큼 움직인다(단, 1초당 1칸씩 움직임)
if (sign)
{
for (int i = 0; i < move; i++)
{
point.y += 1;
n--;
if (n == 0)
return point;
}
for (int i = 0; i < move; i++)
{
point.x += 1;
n--;
if (n == 0)
return point;
}
}
else
{
for (int i = 0; i < move; i++)
{
point.y -= 1;
n--;
if (n == 0)
return point;
}
for (int i = 0; i < move; i++)
{
point.x -= 1;
n--;
if (n == 0)
return point;
}
}
move++; //move 증가
sign = !sign; //부호 바뀜
}
}
int main(void)
{
int n;
cin >> n;
coord result = snail(n);
cout << result.x << " " << result.y << endl;
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 15724번 주지수 (0) | 2018.06.17 |
---|---|
백준 15723번 n단 논법 (0) | 2018.06.17 |
백준 15721번 번데기 (0) | 2018.06.17 |
백준 1256번 사전 (0) | 2018.06.17 |
백준 1182번 부분집합의 합 (0) | 2018.06.16 |