[문제풀이] 백준 16926 - 배열 돌리기1

kodaaa·2023년 1월 6일
0

문제풀이

목록 보기
17/23
post-thumbnail

📢 문제

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

📢 알고리즘

구현

📢 풀이

#include <iostream>

using namespace std;

int arr[300][300];
int N, M, R;

int main()
{
  cin >> N >> M >> R;

  for (int i = 0; i < N; i++)
  {
    for (int j = 0; j < M; j++)
    {
      cin >> arr[i][j];
    }
  }

  //회전
  while (R--)
  {
    //가장자리 셋팅
    int x1 = 0;
    int x2 = N - 1;
    int y1 = 0;
    int y2 = M - 1;

    while (x1 < x2 && y1 < y2)
    {
      int temp = arr[x1][y1]; //값 보관
      for (int i = y1; i < y2; i++)
      {
        arr[x1][i] = arr[x1][i + 1];
      }
      for (int i = x1; i < x2; i++)
      {
        arr[i][y2] = arr[i + 1][y2];
      }
      for (int i = y2; i > y1; i--)
      {
        arr[x2][i] = arr[x2][i - 1];
      }
      for (int i = x2; i > x1; i--)
      {
        arr[i][y1] = arr[i - 1][y1];
      }
      arr[x1 + 1][y1] = temp;

      //한칸씩 줄여서 수행
      x1++;
      y1++;
      x2--;
      y2--;
    }
  }

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

  • 가장자리 배열 한줄, 안쪽 배열 한줄,...씩 같은 짓을 반복하면 되므로
    회전할 배열의 범위를 첫시작위치 + 배열크기(N 또는 M 등)으로 구하려 했는데 너무 복잡해졌다.
  • 👉 그냥 가장자리 위치를 모두 저장하는게 편한 것 같다!
    (x1,y1), (x1,y2), (x2,y1), (x2,y2)
profile
취뽀하자(●'◡'●)💕

0개의 댓글