https://school.programmers.co.kr/learn/courses/30/lessons/77485
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 해결방법
아무래도 중요한 부분은 사각형의 회전이 가장 중요한 포인트일 것이다.
(x1, y1)를 기준으로 잡고 temp라는 변수에 값을 저장한다.
사각형은 시계방향으로 회전한다고 했지만 우리는 (x1, y1)위치에 기준을 잡아놨기 때문에 시계 반대 방향부터 값을 이동시킬 것이다.
이때 이동시키면서 min()메서드를 이용해서 이동한 두 개의 값중 최솟값을 구하면서 이동한다.
2. 정답코드
def solution(rows, columns, queries):
answer = []
matrix = [[0 for i in range(columns+1)] for j in range(rows+1)]
num = 1
for row in range(1, rows+1):
for column in range(1, columns+1):
matrix[row][column] = num
num += 1
for x1, y1, x2, y2 in queries:
tmp = matrix[x1][y1]
mini = tmp
for k in range(x1,x2):
test = matrix[k+1][y1]
matrix[k][y1] = test
mini = min(mini, test)
for k in range(y1,y2):
test = matrix[x2][k+1]
matrix[x2][k] = test
mini = min(mini, test)
for k in range(x2,x1,-1):
test = matrix[k-1][y2]
matrix[k][y2] = test
mini = min(mini, test)
for k in range(y2,y1,-1):
test = matrix[x1][k-1]
matrix[x1][k] = test
mini = min(mini, test)
matrix[x1][y1+1] = tmp
answer.append(mini)
return answer
원소의 자리를 바꿔줄 때마다 현재의 min_v 값과 자리를 바꾼 원소를 비교해 더 작은 값을 min_v 에 넣어줬다
위의 과정을 끝내면 변수 min_v 안에는 자리를 바꾼 원소들 중 최솟값이 들어있기 때문에answer 배열에 추가해줬다.
문제를 처음 직면하는 순간 알듯말듯 하면서 조금 막막했다. 아무래도 사각형을 이동시키는 작업이다 보니 한번 꼬이면 수습불가가 될 듯한 느낌을 받았다.
그리고 이동 값을 갱신하기 위해서는 반시계 방향으로 해야하는데 시계 방향으로 갱신해서 틀린 값을 계속 반환했다.. 정말 힘들었다. 두시간,,,
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 이진 변환 반복하기 (0) | 2022.09.26 |
---|---|
[프로그래머스] Lv.1 소수 찾기 (2) | 2022.09.26 |
[프로그래머스] Lv.2 영어 끝말잇기 (0) | 2022.09.19 |
[프로그래머스] Lv.2 멀쩡한 사각형 (2) | 2022.09.19 |
[프로그래머스] Lv.2 124 나라의 숫자 (0) | 2022.09.19 |