본문 바로가기

알고리즘/프로그래머스

[Lv2] 행렬 테두리 회전하기(python)

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/77485

 

코딩테스트 연습 - 행렬 테두리 회전하기

6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]

programmers.co.kr

 

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