https://programmers.co.kr/learn/courses/30/lessons/77485
내 풀이
def solution(rows,columns,queries):
arr = [[(i)*columns+(j+1) for j in range(columns)] for i in range(rows)] //초기화
answer=[]
for x,y,x1,y1 in queries:
tmp = arr[x-1][y-1] //0부터 시작하기때문에 x-1 y-1로 처리해줘야 한다.
mini = tmp //최초 시작시에 처음 시작점이 최소값이기에 최초의 최소값을 처음 시작점으로 줬다.
for i in range(x-1,x1-1):
arr[i][y-1]=arr[i+1][y-1]
mini = min(arr[i][y-1],mini)
for i in range(y-1,y1-1):
arr[x1-1][i]=arr[x1-1][i+1]
mini = min(arr[x1-1][i],mini)
for i in range(x1-1,x-1,-1):
arr[i][y1-1] = arr[i-1][y1-1]
mini = min(arr[i][y1-1],mini)
for i in range(y1-1,y-1,-1):
arr[x-1][i] = arr[x-1][i-1]
mini = min(arr[x-1][i],mini)
arr[x-1][y]=tmp
answer.append(mini)
return answer
다른사람의 풀이
def solution(rows, columns, queries):
answer = []
board = [[i+(j)*columns for i in range(1,columns+1)] for j in range(rows)]
# print(board)
for a,b,c,d in queries:
stack = []
r1, c1, r2, c2 = a-1, b-1, c-1, d-1
for i in range(c1, c2+1):
stack.append(board[r1][i])
if len(stack) == 1:
continue
else:
board[r1][i] = stack[-2]
for j in range(r1+1, r2+1):
stack.append(board[j][i])
board[j][i] = stack[-2]
for k in range(c2-1, c1-1, -1):
stack.append(board[j][k])
board[j][k] = stack[-2]
for l in range(r2-1, r1-1, -1):
stack.append(board[l][k])
board[l][k] = stack[-2]
answer.append(min(stack))
return answer
본질적으로 푸는 방법은 다 비슷한거 같다.
처음에는 그냥 최소값을 구하기만 하고 돌았을 때 값을 갱신시켜주지 않았는데
그러면 겹치는 경우에 처리를 못하니까 결국 한번 돌때마다 값을 갱신시켜줘야한다.
한줄 한줄 갱신시켜주기가 애매해서 최초에는 값 전체를 다 한번에 갱신시켜주려고 했다.
문제에 일반항이 나와있었기 때문에 갱신시키는 거 자체는 문제가 없었는데 문제는 다중처리하기가 애매했다.
그래서 그냥 한줄 한줄 갱신하는 식으로 바꿨는데 시간이 나면 한번에 전체를 갱신하는 방향으로 시도해보려고 한다
그게 코드도 훨씬 짧고 간결해질거같아서.
'취준 > 프로그래머스' 카테고리의 다른 글
괄호 변환 - 파이썬 (0) | 2022.06.13 |
---|---|
메뉴 리뉴얼 - 파이썬 (0) | 2022.06.06 |
짝 지어 제거하기 - 파이썬 (0) | 2022.06.02 |
더 맵게 - 파이썬 (0) | 2022.06.01 |
기능개발 - 파이썬 (0) | 2022.05.30 |