Python으로 구현한 77485번 행렬 테두리 회전하기 문제 풀이입니다.
https://programmers.co.kr/learn/courses/30/lessons/77485
def rotate(data, start_x, start_y, end_x, end_y) :
info = [data[start_x-1][start_y-1]]
# start_x 열
for i in range(start_y, end_y) :
info.append(data[start_x-1][i])
data[start_x-1][i] = info[-2]
# end_y 행
for i in range(start_x, end_x) :
info.append(data[i][end_y-1])
data[i][end_y-1] = info[-2]
# end_x 열
for i in range(end_y-2, start_y-2, -1) :
info.append(data[end_x-1][i])
data[end_x-1][i] = info[-2]
# start_y 행
for i in range(end_x-2, start_x-2, -1) :
info.append(data[i][start_y-1])
data[i][start_y-1] = info[-2]
return data, min(info)
def solution(rows, columns, queries) :
answer = []
data = [[0] * columns for _ in range(rows)]
index = 1
for i in range(rows) :
for j in range(columns) :
data[i][j] = index
index += 1
for start_x, start_y, end_x, end_y in queries :
data, min_value = rotate(data, start_x, start_y, end_x, end_y)
answer.append(min_value)
return answer
1. rows * columns 크기의 2차원 data 리스트를 정의하고, 각 칸에 index를 1씩 증가시키면서 값을 삽입한다.
2. queries의 요소를 가져와 data 리스트와 함께 rotate() 함수의 매개변수로 전달하여 테두리를 회전하고 최솟값을 반환받는다.
3. 행렬 테두리를 회전시키는 rotate() 함수의 작업은 아래와 같다.
- 첫번째 좌표(start_x, start_y)를 기준으로 (동 남 서 북) 순서로 값을 확인한다.
- 확인하는 값을 info 리스트에 추가하고, 갱신된 info 리스트에서 뒤에서 두 번째에 존재하는 값이 이전 값이므로 현재 확인하는 값을 뒤에서 두 번째 값으로 갱신한다.
- 갱신된 data 리스트와 info 리스트에 존재하는 최솟값을 반환한다.
5. min_value 값을 answer 리스트에 추가하고, 위와 같은 반복 작업을 모두 마치면 최종적으로 answer 리스트를 반환한다.
'프로그래머스(Python) 풀이 > Level.2' 카테고리의 다른 글
프로그래머스(Python) 42577번 전화번호 목록 풀이 (0) | 2022.05.06 |
---|---|
프로그래머스(Python) 17677번 [1차] 뉴스 클러스터링 풀이 (0) | 2022.05.05 |
프로그래머스(Python) 12973번 짝지어 제거하기 풀이 (0) | 2022.05.05 |
프로그래머스(Python) 42626번 더 맵게 풀이 (0) | 2022.05.05 |
프로그래머스(Python) 12899번 124 나라의 숫자 풀이 (0) | 2022.05.05 |