https://school.programmers.co.kr/learn/courses/30/lessons/77485?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이1
회전을 어떻게 구현할지 고민하다가 새로운 1차원 배열을 만들고, 한 칸 뒤로 밀린 또 다른 새로운 배열을 만들어 다시 maps에 반영해주는 방법을 생각했다.
또한 1번째 행,열부터 시작이므로 편의상 0번째 행,열을 0으로 채운 maps를 만들어 문제를 풀었다.
코드
def solution(rows, columns, queries):
answer = []
# 행렬 만들기
maps = [[0 for _ in range(columns+1)]]
maps += [[i*columns + j for j in range(columns+1)] for i in range(rows)]
for i in range(rows+1):
maps[i][0] = 0
# 회전 적용
for query in queries:
x1,y1,x2,y2 = query
arr = []
for j in range(y1,y2):
arr.append(maps[x1][j])
for i in range(x1,x2):
arr.append(maps[i][y2])
for j in range(y2,y1,-1):
arr.append(maps[x2][j])
for i in range(x2,x1,-1):
arr.append(maps[i][y1])
answer.append(min(arr))
new_arr = [arr[-1]]+arr[:-1]
k=0
for j in range(y1,y2):
maps[x1][j] = new_arr[k]
k += 1
for i in range(x1,x2):
maps[i][y2] = new_arr[k]
k += 1
for j in range(y2,y1,-1):
maps[x2][j] = new_arr[k]
k += 1
for i in range(x2,x1,-1):
maps[i][y1] = new_arr[k]
k += 1
return answer
연산량이 많고 거의 같은 내용의 데이터를 담는 배열을 여러 개 사용해 불필요한 메모리를 사용하는 거 같았다.
또한 0번째 행과 열을 사용하지 않고 0을 더해주는 것도 찝찝했다.
풀이2
회전을 하면서 1개의 요소만 temp에 저장하면 나머지는 기존의 배열 내에서 갱신할 수 있었다.
또한 0번째 행,열을 0으로 채우지 않고 그대로 사용했다.
코드
def solution(rows, columns, queries):
answer = []
# 행렬 만들기
maps = [[i*columns + j + 1 for j in range(columns)] for i in range(rows)]
# 회전 적용
for x1,y1,x2,y2 in queries:
x1,y1,x2,y2 = x1-1,y1-1,x2-1,y2-1 # 인덱스 조정
temp = maps[x1][y1]
m = min(10000,temp)
for i in range(x1,x2):
maps[i][y1] = maps[i+1][y1]
m = min(m, maps[i][y1])
for j in range(y1,y2):
maps[x2][j] = maps[x2][j+1]
m = min(m, maps[x2][j])
for i in range(x2,x1,-1):
maps[i][y2] = maps[i-1][y2]
m = min(m, maps[i][y2])
for j in range(y2,y1,-1):
maps[x1][j] = maps[x1][j-1]
m = min(m, maps[x1][j])
maps[x1][y1+1] = temp
answer.append(m)
return answer
'TIL' 카테고리의 다른 글
HTML을 더블 클릭해서 열면 기능이 제한되는 이유 (0) | 2024.06.16 |
---|---|
[코딩 테스트] 문제에서 시간 초과, 메모리 초과 예상하기 #python (0) | 2024.05.22 |
[구현] 나만의 에러 처리 만들기 (1) | 2024.04.14 |