반응형
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 |
Tags
- CSS
- android
- 해슁
- DP
- Color
- 순환
- front-end
- Kotlin
- algorithm
- 클린코드
- 검색트리
- 프로그래머스
- codecademy
- CleanCode
- Spring
- DFS
- 코딩테스트
- 다이나믹 프로그래밍
- SQL
- BFS
- html
- 정렬
- 알고리즘
- inflearn
- javascript
- 구현
- 자바
- SWEA
- java
- Web
Archives
- Today
- Total
깡뇽
[백준] 16935번 배열 돌리기3 파이썬 본문
반응형
NxM 크기 배열.
R번 연산.
1번 : 상하 반전
2번 : 좌우 반점
3번 : 오른쪽으로 90 회전
4번 : 왼른쪽으로 90 회전
* 5 & 6번 연산 수행 시, N/2*M/2인 4개의 부분 배열로 나누어야 함.
5번 : 1->2 / 2->3 / 3->4 / 4->1
6번: 1->4 / 4->3 / 3->2 / 2->1
16935번 배열 돌리기3
n, m, r = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
operation = list(map(int, input().split()))
def cal1():
temp_board = [[0] * m for _ in range(n)]
for i in range(n):
temp_board[i] = board[n-1-i]
return temp_board
def cal2():
temp_board = [[0] * m for _ in range(n)]
for i in range(n):
for j in range(m):
temp_board[i][j] = board[i][m-1-j]
return temp_board
def cal3(board, n, m):
temp_board = [[0] * n for _ in range(m)]
for i in range(m):
for j in range(n):
temp_board[i][j] = board[n-1-j][i]
return temp_board
def cal4(board, n, m):
temp_board = [[0] * n for _ in range(m)]
for i in range(m):
for j in range(n):
temp_board[i][j] = board[j][m - 1 - i]
return temp_board
def cal5():
temp_board = [[0] * m for _ in range(n)]
#1->2
for i in range(n // 2):
for j in range(m // 2):
temp_board[i][j + m // 2] = board[i][j]
#2->3
for i in range(n // 2):
for j in range(m // 2, m):
temp_board[i + n // 2][j] = board[i][j]
#3->4
for i in range(n // 2, n):
for j in range(m // 2, m):
temp_board[i][j - m // 2] = board[i][j]
#4->1
for i in range(n // 2, n):
for j in range(m // 2):
temp_board[i - n // 2][j] = board[i][j]
return temp_board
def cal6():
temp_board = [[0] * m for _ in range(n)]
#1->4
for i in range(n // 2):
for j in range(m // 2):
temp_board[i + n // 2][j] = board[i][j]
#4->3
for i in range(n // 2, n):
for j in range(m // 2):
temp_board[i][j + m // 2] = board[i][j]
#3->2
for i in range(n // 2, n):
for j in range(m // 2, m):
temp_board[i - n // 2][j] = board[i][j]
#2->1
for i in range(n // 2):
for j in range(m // 2, m):
temp_board[i][j - m // 2] = board[i][j]
return temp_board
for oper in operation:
if oper == 1:
board = cal1()
elif oper == 2:
board = cal2()
elif oper == 3:
board = cal3(board, n, m)
n, m = m, n
elif oper == 4:
board = cal4(board, n, m)
n, m = m, n
elif oper == 5:
board = cal5()
else:
board = cal6()
for row in board:
print(*row)
1. 어디까지 고민을 했는가
1번 연산 : 행 그대로 두고 열만 이동
2번 연산 : 열 그대로 두고 행만 이동
2. 어디서 막혔는가
3번 연산 & 4번 연산 - 흠
5번 연산 & 6번 연산 - 어떻게 쪼개지..?
3. 어떻게 해결했는가
3번 연산 : n과 m을 바꿔서 적용. [a , b] -> [b , c]
4번 연산 : n과 m을 바꿔서 적용. [a , b] -> [c , b]
5번 연산 & 6번 연산 : 각 구간을 0~n//2, n//2~n, 0~m//2, m//2~m으로 쪼갠 후 이동.
출처 : https://www.acmicpc.net/problem/16935
참고 : https://ywtechit.tistory.com/169
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[백준] 14499번 주사위 굴리기 파이썬 (0) | 2022.10.11 |
---|---|
[백준] 17406번 배열 돌리기4 파이썬 (0) | 2022.10.07 |
[백준] 16927번 배열 돌리기2 파이썬 (0) | 2022.10.07 |
[백준] 16926번 배열 돌리기1 파이썬 (1) | 2022.10.07 |
[백준] 17144번 미세먼지 안녕! 파이썬 (0) | 2022.10.05 |