[백준] 1913번: 달팽이

2022. 9. 20. 15:31TIL💡/Algorithms

https://www.acmicpc.net/problem/1913

 

1913번: 달팽이

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서

www.acmicpc.net

2차원 배열 구현 기술을 키우기 위해 도전한 문제이다. 실버3임에도 불구하고 너무 오래 걸렸다..ㅠ

참고로 현재 회사의 면접 내 라이브 코딩테스트에서도 이와 유사한 문제를 풀었는데, 그때는 실패했기 때문에 더욱 절치부심하면서 풀고 있다.

이런 문제는 말그대로 작은 숫자부터 시작해서 점화식을 잘 만들면 아무리 큰 숫자가 와도 금방 풀기에 좋다.

 

여기서 나는 n 바퀴마다 한 바퀴의 길이, 시작점을 기준으로 2차원 배열을 채워나갔다.

한 바퀴를 4등분하여 한줄씩 채워나갔다.

 

#include <iostream>
using namespace std;
int arr[999][999];
int main() {
    int n, num, x = 0 ,y = 0;
    cin >> n >> num;
    int t = n / 2;
    int d = 1;
    while(t >= 0) {
        int start;
        int len = 2 * (n / 2 - t) + 1;
        if(t == n / 2) {
            start = t;
            if(d == num) {
                x = start;
                y = start;
            }
            arr[start][start] = d++;
            t--;
            continue;
        }
        else {
            start = t;
            t--;
        }
        for(int i = start + 1;i < start + len;i++) {
            if(d == num) {
                x = start;
                y = i;
            }
            
            arr[start][i] = d++;
        }
        for(int i = start + 1;i < start + len;i++) {
            if(d == num) {
                x = i;
                y = start + len - 1;
            }
            arr[i][start + len - 1] = d++;
        }
        
        for(int i = start + len - 2;i >= start;i--) {
            if(d == num) {
                x = start + len - 1;
                y = i;
            }
            arr[start + len - 1][i] = d++;
        }
        for(int i = start + len - 2;i >= start;i--) {
            if(d == num) {
                x = i;
                y = start;
            }
            arr[i][start] = d++;
        }
    }
    
    for(int i = 0;i < n;i++) {
        for(int j = 0;j < n;j++) {
            cout << arr[i][j] << " ";
        }
        cout << '\n';
    }
    cout << x + 1 << " " << y + 1 << '\n';;
}

 

'TIL💡 > Algorithms' 카테고리의 다른 글

[백준] 2075번: N번째 큰 수  (0) 2022.09.20
[백준] 1959번: 달팽이3  (0) 2022.09.20
[백준] 1890번: 점프  (0) 2022.09.20
2차원 배열 쓰지 않고 달팽이 배열 만들기  (0) 2022.09.19
[백준] 2011번: 암호코드  (0) 2022.09.19