https://www.acmicpc.net/problem/16926
구현(simulation) 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
n, m, r입력 후 n행 m열에 대해 매번 수를 입력받고 이차원 배열 arr에 저장합니다.
📔 풀이과정
좌상의 점, 우하의 점 이 두개의 점을 특정짓는다면 사각형이 그려집니다. 이 사각형의 테두리를 min(m,n)/2번 특정지어 돌려줘야 합니다. rotateArr()함수를 r번 시행합니다. 매 함수 시행시 다음과 같이 동작합니다.
1. min(n,m)/2만큼 좌상의 점(x1행, y1열), 우상의 점(x2행, y2열)을 기준을 잡고 테두리를 추상적으로 생각해 형성해봅니다.
2. 반시계 방향으로 돌아야 합니다. 따라서 방향을 4가지로 좌, 하, 우, 상 순으로 tmp배열에 기존 arr의 값을 복사해 저장합니다. 하드코딩방식이 4줄뿐이라 작성해봤습니다.
3. 임시배열 tmp를 arr로 복사합니다.
📔 정답출력
돌린 결과를 출력합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
int n, m, r, arr[301][301];
//좌상 점, 우하 점
void rotateArr(){
int tmp[301][301];
for(int rot = 0; rot < min(n,m)/2; rot++){
int x1 = rot, y1 = rot, x2 = n - 1 - rot, y2 = m - 1 - rot;
//좌
for(int i = y2 - 1; i >= y1; i--) tmp[x1][i] = arr[x1][i+1];
//하
for(int i = x1 + 1; i <= x2; i++) tmp[i][y1] = arr[i-1][y1];
//우
for(int i = y1 + 1; i <= y2; i++) tmp[x2][i] = arr[x2][i - 1];
//상
for(int i = x2 - 1; i >= x1; i--) tmp[i][y2] = arr[i+1][y2];
}
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
arr[i][j] = tmp[i][j];
}
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--) rotateArr();
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++)
cout << arr[i][j] << ' ';
cout << '\n';
}
}
📕 Test Case
몇 가지 test case를 작성해봤습니다. 도움되었으면 좋겠습니다.
2 4 1
1 2 3 4
4 5 6 7
답 :
2 3 4 7
1 4 5 6
2 4 2
1 2 3 4
4 5 6 7
답 :
3 4 7 6
2 1 4 5
2 4 3
1 2 3 4
4 5 6 7
답 :
4 7 6 5
3 2 1 4
2 4 4
1 2 3 4
4 5 6 7
답:
7 6 5 4
4 3 2 1
2 4 5
1 2 3 4
4 5 6 7
답 :
6 5 4 1
7 4 3 2
2 4 6
1 2 3 4
4 5 6 7
답 :
5 4 1 2
6 7 4 3
2 4 7
1 2 3 4
4 5 6 7
답 :
4 1 2 3
5 6 7 4
2 4 8
1 2 3 4
4 5 6 7
답 :
1 2 3 4
4 5 6 7
3 2 1
1 2
3 4
5 6
답 :
2 4
1 6
3 5
3 2 2
1 2
3 4
5 6
답:
4 6
2 5
1 3
2 3 1
1 2 3
4 5 6
답 :
2 3 6
1 4 5
4 4 1
1 2 3 4
5 6 7 8
9 8 7 6
5 4 3 2
답:
2 3 4 8
1 7 7 6
5 6 8 2
9 5 4 3
4 4 2
1 2 3 4
5 6 7 8
9 8 7 6
5 4 3 2
답:
3 4 8 6
2 7 8 2
1 7 6 3
5 9 5 4
4 7 1
1 2 3 4 5 6 7
7 6 5 4 3 2 1
1 7 6 5 4 3 2
2 1 7 6 5 4 3
답:
2 3 4 5 6 7 1
1 5 4 3 2 3 2
7 6 7 6 5 4 3
1 2 1 7 6 5 4
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 프로그래머스(2020 카카오 인턴십) : 키패드 누르기 (0) | 2021.09.06 |
---|---|
(C++) - 백준(BOJ) 6764번 : Sounds fishy! (0) | 2021.09.02 |
(C++) - 프로그래머스(위클리 챌린지) : 3주차 (0) | 2021.08.23 |
(Python) - 백준(BOJ) 20499번 : Darius님 한타 안 함? (0) | 2021.08.22 |
(C++) - 프로그래머스(2020 KAKAO BLIND RECRUITMENT) : 괄호 변환 (0) | 2021.08.21 |