๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Programmers)

[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์‚ผ๊ฐ ๋‹ฌํŒฝ์ด(Level 2)

by ์•ˆ์ฃผํ˜• 2022. 3. 14.

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์‚ผ๊ฐ ๋‹ฌํŒฝ์ด

5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

programmers.co.kr

์ฝ”๋“œ

#include <string>
#include <vector>
#include <iostream>


using namespace std;

vector<int> solution(int n) {
    vector<int> answer;
    
    int num = 1;
    int move_cnt = n;
    
    int arr[1001][1001]={0,};
    int x=0, y=0;
    
    for(int i=0; i<n*n; i++){
        if(arr[x][y]!=0) break;
        switch(i%4){
            case 0: //์•„๋ž˜๋กœ ์ด๋™
                for(int k=0; k<move_cnt; k++){
                    arr[x][y] = num;
                    num++;
                    x++;
                }
                x--;
                y++;
                move_cnt--;
                break;
                
            case 1: //์šฐ์ธก์œผ๋กœ ์ด๋™
                for(int k=0; k<move_cnt; k++){
                    arr[x][y] = num;
                    num++;
                    y++;
                }
                y--;
                x--;
                move_cnt--;
                break;
                
            case 2: //์œ„์ชฝ์œผ๋กœ ์ด๋™
                for(int k=0; k<move_cnt; k++){
                    arr[x][y] = num;
                    num++;
                    x--;
                }
                x++;
                y--;
                move_cnt--;
                break;
                
            case 3: //์ขŒ์ธก์œผ๋กœ ์ด๋™
                x++;
                int move_x = x, move_y = y;
                
                while(true){
                    if(arr[move_x][move_y]!=0)break;
                    move_y--;
                }
                y = move_y+1;
                break;
        }
    }
    
    for(int i=0; i<1001; i++){
        for(int k=0; k<1001; k++){
            if(arr[i][k]!=0){
                answer.push_back(arr[i][k]);
            }
        }
    }
    return answer;
}

 

ํ’€์ด(40๋ถ„)

 

1913๋ฒˆ: ๋‹ฌํŒฝ์ด

N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ํ‘œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ ์ค„์— N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ํ•œ ์นธ์”ฉ ๋„์–ด์„œ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋ฉฐ, ์ž๋ฆฟ์ˆ˜๋ฅผ ๋งž์ถœ ํ•„์š”๊ฐ€ ์—†๋‹ค. N+1๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ๋ฐ›์€ ์ž์—ฐ์ˆ˜์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜๋ฅผ ํ•œ ์นธ ๋„์–ด์„œ

www.acmicpc.net

์œ„์™€ ๊ฐ™์€ ๊ธฐ์ดˆ์ ์ธ ๋‹ฌํŒฝ์ด ๋ฌธ์ œ์—์„œ ์กฐ๊ธˆ ๋” ์ƒ๊ฐ์„ ํ•ด์•ผ ํ–ˆ๋˜ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์ €์ฒ˜๋Ÿผ ์ƒํ•˜์ขŒ์šฐ ์ด๋™ ๋ฐฉํ–ฅ๋งˆ๋‹ค ๊ตฌํ˜„ํ–ˆ์„ ์‹œ ์ขŒ์ธก์œผ๋กœ ๊ฐˆ ๋•Œ ํŠนํžˆ ์‹ ๊ฒฝ ์“ธ ๋ถ€๋ถ„์ด ๋งŽ์•˜๋Š”๋ฐ ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์ขŒ์ธก ์ด๋™์‹œ ์•„๋ž˜๋กœ ํ•œ ์นธ ์ด๋™ ํ›„ ์ ค ์ขŒ์ธก ๋นˆ์นธ์œผ๋กœ ๊ฐ€์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„๋งŒ ์‹ ๊ฒฝ ์จ ์ค€๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ถ€๋ถ„์€ ํฌ๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

 

๋Œ“๊ธ€