[문제 출처]
https://www.codetree.ai/missions/2/problems/rotate-slanted-rectangle/submissions
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
1. 문제
설명
1이상 100이하의 숫자로만 이루어져 있는 n * n 크기의 격자 정보가 주어집니다.
이때, 이 격자 내에 있는 임의의 기울어진 직사각형을 잡아 회전시키려고 합니다.
기울어진 직사각형이란, 격자내에 있는 한 지점으로부터 체스의 비숍처럼 대각선으로 움직이며 반시계 순회를 했을 때 지나왔던 지점들의 집합을 일컫습니다. 이 때 반드시 아래에서 시작해서 1, 2, 3, 4번 방향순으로 순회해야하며 각 방향으로 최소 1번은 움직여야 합니다. 또한, 이동하는 도중 격자 밖으로 넘어가서는 안됩니다.
예를 들어 위의 규칙에 따라 다음과 같이 기울어진 직사각형을 잡아볼 수 있습니다.
위의 기울어진 직사각형의 경우 4행 2열 위치에서 시작하여 순서대로 1번 방향으로 2칸, 2번 방향으로 1칸, 3번 방향으로 2칸, 4번 방향으로 1칸 이동했으므로 이는 편의상 4, 2, 2, 1, 2, 1로 나타낼 수 있습니다. 만약 이 직사각형의 순회경로상에 있는 색칠된 숫자들에 대해서만 반시계 방향으로 한 칸씩 숫자들을 움직이게 된다면, 다음과 같이 숫자들이 바뀌게 됩니다.
초기 격자의 정보와 특정 기울어진 사각형에 대해서 반시계 혹은 시계 방향으로 회전해야 하는 정보가 주어졌을 때, 회전 이후의 결과를 출력하는 프로그램을 작성해보세요.
입력 형식
첫 번째 줄에는 격자의 크기를 나타내는 n이 주어집니다.
두 번째 줄부터는 n개의 줄에 걸쳐 격자에 대한 정보가 주어집니다. 각 줄에는 각각의 행에 대한 정보가 주어지며, 이 정보는 1이상 100이하의 숫자로 각각 공백을 사이에 두고 주어집니다.
그 다음 줄에는 기울어진 직사각형의 정보와 회전 방향을 나타내는 (r, c, m1, m2, m3, m4, dir)값이 각각 공백을 사이에 두고 주어집니다. 이는 기울어진 직사각형이 r행, c열에서 시작하여 1번, 2번, 3번, 4번 방향으로 각각 m1, m2, m3, m4만큼 순서대로 이동했을 때 그려지는 직사각형임을 의미하며, dir이 0인 경우에는 반시계 방향으로 1칸씩 회전해야 함을, dir이 1인 경우에는 시계 방향으로 1칸씩 회전해야 함을 의미합니다. 올바르지 않은 기울어진 직사각형의 정보가 주어지는 경우는 없다고 가정해도 좋습니다. (1 ≤ r, c ≤ n)
- 3 ≤ n ≤ 100
출력 형식
회전 이후 격자의 상태를 출력해주세요. n개의 줄에 걸쳐 각 행에 적혀있는 n개의 숫자들을 공백을 사이에 두고 출력합니다.
입출력 예제
예제1
입력:
5
1 2 2 2 2
1 3 4 4 4
1 2 3 3 3
1 2 3 3 3
1 2 3 3 3
4 2 2 1 2 1 0
출력:
1 2 4 2 2
1 2 4 3 4
3 2 2 3 3
1 1 3 3 3
1 2 3 3 3
예제2
입력:
5
1 2 2 2 2
1 3 4 4 4
1 2 3 3 3
1 2 3 3 3
1 2 3 3 3
4 2 2 1 2 1 1
출력:
1 2 3 2 2
1 1 4 2 4
2 2 4 3 3
1 3 3 3 3
1 2 3 3 3
2. 설명
문제에서 설명해준 순서대로 진행하였습니다. 마지막 숫자가 1인경우 시계방향, 0인경우 반시계 방향으로 회전하였습니다.
반시계방향일 경우 가장 마지막 숫자 즉 가장 하단의 좌표를 temp에 저장한뒤, 4, 3, 2, 1로 거슬러 올라가면서 회전을 진행하였습니다. 마지막에는 temp의 값을 반시계방향인 하단 꼭지점에서 위로한칸, 우로 한칸인 곳에 넣은 후 종료하였습니다.
마찬가지로 시계방향일 겅우 가장 마지막 숫자 즉 가장 우측 좌표를 temp에 저장한뒤, 우상단->좌상단->좌하단->우하단->우상단 순서로 끌어당기며 진행하였습니다. 마지막에는 temp의 값을 시계방향인 우측 상단 꼭지점에서 아래한칸, 좌로 한칸인 곳에 넣은 후 종료하였습니다.
3. 코드
'코테준비 > 단순구현(시뮬레이션)' 카테고리의 다른 글
[코드트리 조별과제][C++] 격자 안에서 단일 객체를 이동 / 주사위 던지기 (0) | 2024.08.25 |
---|---|
[코드트리 조별과제][C++] 격자 안에서 단일 객체를 이동 / 벽 짚고 미로 탈출하기 (0) | 2024.08.25 |
[코드트리 조별과제][C++] 격자 안에서 완전탐색 / 양수 직사각형의 최대 크기 (0) | 2024.08.09 |
[프로그래머스][C++][67258] 보석 쇼핑 (0) | 2023.03.17 |
[프로그래머스][C++][17679] 프렌즈4블록 (0) | 2023.03.02 |
댓글