boj 18808 번 문제에서 스티커를 회전하는 방법에 관하여.

 

2차원 배열에 있는 값을 오른쪽 방향으로 90도 회전해서 새로운 배열로 나타내는 방법은 위와 같은 규칙을 통해서 알아낼 수 있고, 

그것을 코드로 작성해서 rotate 함수를 만들어내면, 

 

void rotate(){
  int tmp[12][12];
  
  for(int i = 0; i < r; i++)
    for(int j = 0; j < c; j++)
      tmp[i][j] = paper[i][j];
  
  for(int i = 0; i < c; i++)
    for(int j = 0; j < r; j++)
      paper[i][j] = tmp[r-1-j][i];

  swap(r, c);
}

이와 같이 작성할 수 있다. 

이때에 이 rotate 함수를 사용할때 이 함수가 어떤식으로 동작하는지는, paper 배열이 최대사이즈에서 조금 더 여유롭게 작성되어있는데, 

그때에 그 안에서 r, c 로 씌여있던 것을, c, r 형태로 써서 값들을 옮겨담은뒤에, 그 c, r 형태로 작성한 값들 자체도 서로 값을 바꾸어서

회전하더라도 일관되게 r , c 라는 값으로 다룰 수 있도록 만들어주는 함수이다. 

 

 

출처: https://www.youtube.com/watch?v=jZwf4OPlhtk&ab_channel=BaaarkingDog

  Comments,     Trackbacks