알고리즘/BOJ

백준 15722번 빙글빙글 스네일

꾸준함. 2018. 6. 17. 16:41

문제 링크입니다: 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