첫번째 코드
해당 문제를 보고 처음에는...어...난해했다..!!
어떻게 풀지...? 미뤄지는 알고리즘이 있나...?!
어..그래 뭐 일단 풀어보자!!! 라는 마인드로 시작했다.
일단 row와 col로 구성된 숫자 matrix를 만들었다!
이때 queries에 맞게 구성하기 위해 0번 인덱스에는 모두 0을 넣었다.
어떻게 풀었는지 고민하다가 움직이는 함수를 만들어야겠다~ 라는 생각을 했다!
해당 함수 설명을 위해서는 그림이 필수일 것 같다!
move라는 함수를 생성했다!
해당 함수는 아래 그림과 같은 역할을 한다.
이를 통해 새로운 numbers matrix와 움직인 값 중 최소값을 반환한다!
move 함수를 queries만큼 반복하면 계속 numbers matrix는 갱신되고 answers에 최소값을 append하여 더한다!
answers가 최종 답안이 된다!
def move(data, x1, y1, x2, y2):
left = data[x1][y2]
right = data[x2][y1]
min_num = min(left, right)
for i in range(y2, y1, -1):
data[x1][i] = data[x1][i-1]
min_num = min(min_num, data[x1][i-1])
for i in range(y1, y2):
data[x2][i] = data[x2][i+1]
min_num = min(min_num, data[x2][i+1])
for i in range(x2, x1, -1):
data[i][y2] = data[i-1][y2]
min_num = min(min_num, data[i-1][y2])
for i in range(x1, x2):
data[i][y1] = data[i+1][y1]
min_num = min(min_num, data[i+1][y1])
data[x2-1][y1] = right
data[x1+1][y2] = left
return data, min_num
def solution(rows, columns, queries):
answers = []
number = 1
numbers = [[0] * (columns + 1)]
for _ in range(rows):
row_add = [0]
for _ in range(columns):
row_add.append(number)
number += 1
numbers.append(row_add)
for i in queries:
numbers, answer = move(numbers, i[0], i[1], i[2], i[3])
answers.append(answer)
return answers
통과!
알고리즘을 사용했다!! 라는 느낌보다는 뭔가 헷갈리지 않게 순서대로 정리하면서 꼼꼼히 작성해야 하는 문제인 것 같다!
링크
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
두 정수 사이의 합 (0) | 2024.06.12 |
---|---|
문자열 다루기 기본 (0) | 2024.06.10 |
둘만의 암호 (2) | 2024.06.08 |
신고 결과 받기 (0) | 2024.06.07 |
숫자 짝꿍 (0) | 2024.06.06 |