본문 바로가기

코딩테스트 연습/SWEA

[SWEA] 1954. 달팽이 숫자 d2 (c++)

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PobmqAPoDFAUq&categoryId=AV5PobmqAPoDFAUq&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

다른 d2보단 좀 오래걸렸던 문제!예전에도 풀어본 적 있는 문제인데 갑자기 풀려니까 머리가 안굴러가더라,,,,ㅎㅎㅎ

반복문으로 풀었다!

왼쪽은 n=3, 오른쪽은 n=4

그림을 그리면서 실제 배열에서 어떻게 계산할지 생각해보니까, down 방향과 up 방향으로 갈 때만 n의 크기가 줄어드는 것을 알 수 있었다.

 

1. 첫번째 시작 방향은 right, 입력받은 N의 크기 값을 n으로 두고,

2. up / down 방향으로 갈 때 , n의 크기를 -1씩 해줬다. right / left 방향은 방향 전환 및 cnt초기화만 해줌

3. 반복문의 횟수가 cnt == n의 크기와 같아지면 방향을 변경, 순서는 ( right → down → left → up ) 

✨ snail[y][x]에 대하여 

right일때는  x+1

down일때는  y+1

left일때는 x-1

up일때는 y-1

 

 

#include <iostream>
using namespace std;
#define MAX 11
int main(int argc, char** argv)
{
    int T;
    cin >> T;

    for(int t=0;t<T;t++){
        int n;
        cin >> n;
        int snail[MAX][MAX] = {0,};
        
        string direction = "right"; //첫 시작 방향 오른쪽
        
        int x=-1, y=0;
        int cnt = 0;
        int N = n;
        for(int i=1;i>=0;i++){
            
            if(cnt == n && direction == "up"){
                direction = "right";
                cnt = 0;
            } else if(cnt == n && direction == "right"){
                direction = "down";
                cnt = 0;
                n--;
            } else if(cnt == n && direction == "down"){
                direction = "left";
                cnt = 0;
            } else if(cnt == n && direction == "left"){
                direction = "up";
                cnt = 0;
                n--;
            }
            
            if(direction == "right") x++;
            else if(direction == "left") x--;
            else if(direction == "down" ) y++;
            else if(direction == "up") y--;
            
            snail[y][x] = i;
            cnt++;
            
            if(i == N*N) break;
        }
        
        //출력
        cout << "#" << t+1 << "\n";
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++) {
                cout << snail[i][j];
                if(j != N-1) cout << " ";
            }
            cout << "\n";
        }
    }
    return 0;
}

 

계속 오답이 나왔는데 이유를 모르겠어서,,, 다시 확인해보니 실수로 개행을 하나 더해버렸다. 😵