1. 문제
https://programmers.co.kr/learn/courses/30/lessons/77485
2. 접근 방법
- 파이썬으로 푸는 방법이 생각이 안나서 다른 풀이를 보고 참고했음.... 얼른 파이썬 익숙해지자 흑흑
- 난 전체 배열을 복사하려 했는데, 한 개의 값만 저장해놓고 값을 뒤에서( 현재 값 기준 반시계 방향의 값)을 땡겨서 가져온 후 맨 마지막에 저장했던 값을 넣는 방식으로 푸는 방식도 있었다. 다음부턴 다른 풀이 참고 안해도 해당 방식으로 풀어볼 것!
3. 새로 안 것
1) 2차원 배열에 1~N까지 값 넣기
/*
내가 풀었던 방식
i = i, i+columns, i+2*columns .... rows * columns + 1
j = i, i+1, i+2 .... i+columns-1
*/
board = []
for i in range(1, rows * columns + 1, columns):
board.append([j for j in range(i, i + columns)])
/*
다른 풀이 1
*/
board = [[] for _ in range(rows)]
for i in range(1, rows+1):
for j in range(1, columns+1):
board[i-1].append((i-1)*columns+j)
/*
다른 풀이2
*/
board = [[row * columns + col + 1 for col in range(columns)] for row in range(rows)]
2) 기타
- 난 for문 안에 x1, y1, x2, y2를 선언했는데, for x1, y1, x2, y2 in queries: 의 방식으로도 할 수 있음!
- 시계방향으로 회전할 때, 아래쪽 변 for문 헷갈리지 말것!!! , for k in range(x2-1,x1-1,-1):
4. 코드
더보기
def solution(rows, columns, queries):
answer = []
#2차원 배열 만들기 (세로 rows, 가로 columns)
board = []
for i in range(1, rows * columns + 1, columns):
board.append([j for j in range(i, i + columns)])
#회전하기
for query in queries:
x1, y1, x2, y2 = query
tmp = board[x1-1][y1-1]
minValue = tmp
#위쪽
for k in range(x1-1,x2-1):
board[k][y1-1] = board[k+1][y1-1]
minValue = min (minValue, board[k][y1-1])
#오른쪽
for k in range(y1-1,y2-1):
board[x2-1][k] = board[x2-1][k+1]
minValue = min (minValue, board[x2-1][k])
#아래쪽
for k in range(x2-1,x1-1,-1):
board[k][y2-1] = board[k-1][y2-1]
minValue = min (minValue, board[k][y2-1])
#왼쪽
for k in range(y2-1,y1-1,-1):
board[x1-1][k] = board[x1-1][k-1]
minValue = min (minValue,board[x1-1][k])
board[x1-1][y1] = tmp
answer.append(minValue)
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Lv2] 거리두기 확인하기(python) (0) | 2021.07.29 |
---|---|
[Lv2]괄호 변환(python) (0) | 2021.07.29 |
[Lv2]소수찾기(C++) (0) | 2020.10.23 |
[Lv2]가장 큰 수(C++) (0) | 2020.10.17 |
[Lv1] K번째 수(C++) (0) | 2020.10.17 |