본문 바로가기
coding/algorithm

[SW Expert Academy] D2 1954. 달팽이 숫자

by 눈부신음표 2022. 5. 24.
728x90

D2라고 얕봤다 + 빨리 풀려고하니까 실수가 는다. 10분이면 풀줄알았는데.. error가 자꾸 떠서 30분은 걸렸다ㅠ

*다짜고짜 코딩하지 말고 대충 적어놓고 하자.*

*언제 멈춰야하는지 확실히 하자.*

*out of range가 발생할 수 있는 곳을 천천히 꼼꼼하게 파악하자.*

 

더보기
#include<iostream>
#include<vector>

using namespace std;

int main(){
    // 오른쪽 아래 왼쪽 위 순서대로
    vector<int> dx = {0, 1, 0, -1};
    vector<int> dy = {1, 0, -1, 0};

    int tc;
    cin >> tc;
    for(int t = 0; t < tc; t++){
        int N;
        cin >> N;
        vector<vector<int>> snails(N, vector<int>(N, 0));

        int x = 0, y = 0, dir = 0;
        for(int i=1; i<N*N+1; i++){
            snails[x][y] = i;
            if(i == N*N) break;
            while(x+dx[dir] >= N || y+dy[dir] >= N || x+dx[dir] < 0 || y+dy[dir] < 0 || snails[x+dx[dir]][y+dy[dir]] != 0)
                dir = (dir+1)%4;
            
            x = x+dx[dir];
            y = y+dy[dir];
        }

        cout << "#" << t+1 << endl;
        for(vector<int> vec: snails){
            for(int snail: vec){
                cout<<snail<<" ";
            }
            cout<<endl;
        }
    }
}

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

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

swexpertacademy.com

728x90

[접근1]

오른쪽 아래 왼쪽 위 순서대로 이동하므로 이동 방향이 담긴 좌표를 만들어준다.

vector<int> dx = {0, 1, 0, -1};
vector<int> dy = {1, 0, -1, 0};

[접근2]

입력받은 N의 크기만큼 snails vector를 초기화해주고, 시작 위치는 0,0 direction 방향도 0으로 설정해준다.

vector<vector<int>> snails(N, vector<int>(N, 0));

int x = 0, y = 0, dir = 0;

[접근3]

snail 2D vector를 돌면서 x, y위치에 번호를 넣어준다.

만약 N*N까지 번호를 다 넣었다면 break를 해준다.

다음 위치로 이동하기 위해, dir를 설정해줘야한다.

만약 dir방향으로 나아갔을때, vector 범위를 벗어나거나, 해당위치가 이미 번호를 부여받았다면 이동 방향을 바꾼다.

dir가 정해졌다면 x, y를 재설정해준다.

for(int i=1; i<N*N+1; i++){
    snails[x][y] = i;
    if(i == N*N) break;
    while(x+dx[dir] >= N || y+dy[dir] >= N || x+dx[dir] < 0 || y+dy[dir] < 0 || snails[x+dx[dir]][y+dy[dir]] != 0)
        dir = (dir+1)%4;

    x = x+dx[dir];
    y = y+dy[dir];
}
728x90

댓글