Programmers 행렬 테두리 회전하기 Level 2 - python

유형석·2022년 7월 9일
0

python/Algorithm

목록 보기
3/9
post-thumbnail

행렬 테두리 회전하기

Programmers 행렬 테두리 회전하기 Level 2 문제 Link

Before

After

입출력 예시

  • 처음에 2차원 배열로 진행하였으나, 너무 길어지고 막막해서 1차원 배열 index 값으로 접근
  • i 행 j 열에 있는 숫자는 ((i-1) x columns + j) -> 이것을 이용
def solution(rows, columns, queries):
result = []
temp = [x for x in range(rows * colums + 1)]
# 1~시작하는 정, 직사각형 모양이며, index로 접근 시 첫 번째 자리가 0이 오게된다.
# 혼돈이 없도록 1차원 배열 선언 시 0포함하여 주고, 마지막자리 포함을 위해 +1

	for quer in queries:
		index_list = []
    	val_list = []
    
   		left_top = (quer[0] -1) * columns + quer[1]
   		right_top = (quer[0] -1) * columns + quer[3]
 	  	left_bot= (quer[2] -1) * columns + quer[1]
   		right_bot = (quer[2] -1) * columns + quer[3]
    	# 왼쪽 위와 오른쪽 아래 방향은 주어진 것을 토대로 나머지 right_top, left_bot을 구함
   		# ((행 - 1) * columns + 열)
	   	index_list = [x for x in range(left_top, right_top)] + 
  	 	[x for x in range(right_top, right_bot, columns)] + 
  	 	[x for x in range(right_bot, left_bot, -1)] + 
  	 	[x for x in range(left_bot, left_top, -columns)]
 	  	# index 위치를 돌릴 순서대로 넣어준다.
    	# 왼쪽위 -> 오른쪽 위
  	 	# 오른쪽 위 -> 오른쪽 아래 시계방향으로 반복
    
    	val_list = [temp[i] for i in index_list]
    	# temp -> 원래 판 val_list -> 원래 판에 있는 값을 넣어준다
    	result.append(min(val_list))
        # 결과 list에 최솟값 추가
    	val_list.insert(0, val_list.pop())
        # 시계방향으로 돌려주기
    
    	cnt = 0
    	for i in index_list:
    		temp[i] = val_list[cnt]
        	cnt += 1
	return result
  • 포인트
  1. 행, 열 x, y 좌표 이렇게 생각하다 엄청 헷갈렸지만 행, 열 그 자체만 생각하였다.
  2. 이렇게 풀려면 변수 이름을 깔끔하게 지어야 할 것 같다.
profile
Carrot_hyeong

0개의 댓글