문제

https://www.acmicpc.net/group/9036

걸린 시간

02 : 45 : 20

풀이

C++

#include <bits/stdc++.h>
#define INF 1e9
typedef long long ll;
using namespace std;

int y, x;
int r1, c1, r2, c2;
int paper[50][5];
int dy[4] = {0, -1, 0, 1}; // W, S, E, N
int dx[4] = {1, 0, -1, 0};

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> r1 >> c1 >> r2 >> c2;
    y = x = 0;
    int d = 0; // direction
    int inc = 1; // increase
    int cnt = 1; // move count
    int cor = 2; // corner
    for(int i = 1; i <= 10001*10001; i++){
        if(r1 <= y && y <= r2 && c1 <= x && x <= c2)
            paper[y-r1][x-c1] = i;
        if(i == cor){
            cor += inc;
            d++;
            cnt++;
            if(cnt%2 == 0)
                inc++;
        }
        y += dy[d%4];
        x += dx[d%4];
    }
    int m = 0; // maximum value 
    for(int r = 0; r < 50; r++)
        for(int c = 0; c < 5; c++)
            m = max(m, paper[r][c]);
    int order = to_string(m).size();
    for(int r = 0; r <= r2-r1; r++){
        for(int c = 0; c <= c2-c1; c++){
            for(int i = 0; i < order-to_string(paper[r][c]).size(); i++)
                cout << " ";
            cout << paper[r][c] << " ";
        }
        cout << "\n";
    }
    return 0;
}
  1. 소용돌이 알고리즘 구현
  2. 문제에서 요구하는 소용돌이 부분만 저장

위 두 가지를 생각해내는데 정말 많은 시간이 걸렸다. 풀이를 설명할 힘이 없다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 20001 고무오리 디버깅  (0) 2020.09.27
Baekjoon 19946번 2의 제곱수 계산하기  (0) 2020.09.27
Baekjoon 2225번 합분해  (0) 2020.09.23
Baekjoon 10800번 컬러볼  (0) 2020.09.23
Baekjoon 2174번 로봇 시뮬레이션  (0) 2020.09.21

댓글