[C++] BOJ 16926번 : 배열 돌리기 1

Lern-Backup·2021년 10월 5일
0

Baekjoon

목록 보기
16/20

📝 문제


💻 실행 코드

// BOJ 16926번 : 배열 돌리기 1
#include <iostream>
using namespace std;

int main() {
    int arr[301][301]; // 배열 생성
    int dx[4] = {0, 1, 0, -1}; // 우상좌하
    int dy[4] = {1, 0, -1, 0};
    int n, m, r;
    cin >> n >> m >> r;

    for(int i = 0; i < n; i++){ // 배열 입력받기
        for(int j = 0; j < m; j++){
            cin >> arr[i][j];
        }
    }

    for(int i = 0; i < r; i++){ // 회전 횟수만큼 반복
        for(int j = 0; j < min(n, m) / 2; j++){ //
            int x = j;
            int y = j;
            int value = arr[x][y];
            int tmp = 0;

            while(tmp < 4){
                int nx = x + dx[tmp];
                int ny = y + dy[tmp];

                if(nx == j && ny == j) break;
                if(nx >= j && ny >= j && nx < n - j && ny < m - j){
                    arr[x][y] = arr[nx][ny];
                    x = nx;
                    y = ny;
                }
                else
                    tmp++;
            }
            arr[j + 1][j] = value;
        }
    }

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cout << arr[i][j] << " ";
        }
        cout << "\n";
    }
}

📚 문제 풀이

배열을 생성한 뒤 입력을 받음
회전 횟수만큼 반복을 하고 배열 크기중 작은 것을 2로 나눈 만큼 반복
value, x, y를 j로 초기화해주고 4까지 반복
nx와 ny에 우상좌하를 반복하며 값을 더해 넣어주고 만약 nx와 ny가 j랑 같을 때 종료
nx와 ny가 j보다 크거나 같고, nx와 ny가 n과 m에서 j를 뺀 값보다 작을 때 arr을 갱신
최종으로 arr[j + 1][j]에 value를 넣어줌


✅ 실행 결과

profile
공부 백업용

0개의 댓글