Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 9252
- jpa
- Gold4
- 오류
- java
- 개념
- leetcode 69
- AWS
- mysql
- gold2
- 구현
- 프로그래머스
- leetcode
- PYTHON
- spring
- 백준
- 배포
- CSS
- Thymeleaf
- LEVEL2
- siver3
- 백엔드
- Kakao
- glod5
- HTML
- LEVEL1
- error
- glod4
- LCS
- gold5
Archives
- Today
- Total
이 험난한 세상에서어어~
배열 돌리기 본문
문제 설명
배열을 45도로 돌리는 문제다. 문제가 상당히 길기에 백준 링크로 가서 차근차근 읽어보는 것을 추천한다.
https://www.acmicpc.net/problem/17276
일단 푸는 방법은 문제에 설명한 것들을 그대로 구현하면 된다. 다만, 배열의 인덱스를 벗어나지 않게 조심하자!
문제 풀이
첫 번째 접근
그냥 그대로 구현하면 되는데, 시계 방향으로 돌리는 방법은 문제에 쓰여 있으니 반 시계방향으로 돌리는 방법을 설명하겠다.
1. X의 주 대각선을 가운데 행으로 옮긴다.
tmp[n//2][i] = X[i][i]
2. X의 가운데 열을 주 대각선으로 옮긴다.
tmp[i][i] = X[i][n // 2]
3. X의 부 대각선을 가운데 열로 옮긴다.
tmp[i][n//2] = X[i][(n - 1) - i]
4. X의 가운데 행을 X의 부 대각선으로 옮긴다.
tmp[(n-1)-i][i] = X[n // 2][i]
코드
import sys
def clockWise(n, X):
tmp = [[0 for i in range(n)] for j in range(n)]
for i in range(n):
for j in range(n):
tmp[i][j] = X[i][j]
for i in range(n):
# X의 주 대각선을 ((1,1), (2,2), …, (n, n)) 가운데 열 ((n+1)/2 번째 열)로 옮긴다.
tmp[i][n//2] = X[i][i]
# X의 가운데 열을 X의 부 대각선으로 ((n, 1), (n-1, 2), …, (1, n)) 옮긴다.
tmp[i][(n - 1) - i] = X[i][n // 2]
# X의 부 대각선을 X의 가운데 행 ((n+1)/2번째 행)으로 옮긴다.
tmp[n // 2][i] = X[(n - 1) - i][i]
# X의 가운데 행을 X의 주 대각선으로 옮긴다.
tmp[i][i] = X[n // 2][i]
return tmp
def antiClockWise(n, X):
tmp = [[0 for i in range(n)] for j in range(n)]
for i in range(n):
for j in range(n):
tmp[i][j] = X[i][j]
for i in range(n):
# X의 주 대각선을 ((1,1), (2,2), …, (n, n)) 가운데 행 ((n+1)/2 번째 행)로 옮긴다.
tmp[n//2][i] = X[i][i]
# X의 가운데 열을 X의 주 대각선으로 ((1, 1), (2, 2), …, (n, n)) 옮긴다.
tmp[i][i] = X[i][n // 2]
# X의 부 대각선을 X의 가운데 열 ((n+1)/2번째 열)으로 옮긴다.
tmp[i][n//2] = X[i][(n - 1) - i]
# X의 가운데 행을 X의 부 대각선으로 옮긴다.
tmp[(n-1)-i][i] = X[n // 2][i]
return tmp
t = int(sys.stdin.readline().rstrip(" "))
for _ in range(t):
n, degree = map(int, sys.stdin.readline().split(" "))
X = []
for j in range(n):
X.append(list(map(int, sys.stdin.readline().split(" "))))
degree //= 45
if degree < 0:
degree *= -1
for k in range(degree):
X = antiClockWise(n, X)
# printX(X)
else:
for k in range(degree):
X = clockWise(n, X)
# printX(X)
for i in range(n):
for j in range(n):
print(X[i][j], end=' ')
print()
여담
참고로 출력할 때 최종 X를 보여줘야 한다. 계속해서 보여주다간 나처럼 출력 초과가 날지도... ㅋㅋㅋㅋ
'algorithm > 코딩 테스트' 카테고리의 다른 글
배열 돌리기 3 (0) | 2023.06.01 |
---|---|
아기 상어(백준 16236, python) (0) | 2023.05.29 |
백준(20291), 파일 정리 python (0) | 2023.05.22 |
문자열 압축(python), kakao (1) | 2023.05.13 |
무지의 먹방 라이브(python) (0) | 2023.05.12 |