문제
https://school.programmers.co.kr/learn/courses/30/lessons/77485
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
잘 읽어보고 해결만 하면 되는 문제이다.
주요 아이디어
- 지정된대로 숫자를 차례대로 넣어서 원래 배열을 만들어주자
- arr에 저장된 value를 하나씩 swap하면서 시계 방향으로 회전
- swap할 전체 횟수를 지정해주고, dx, dy로 회전 방향을 정해주면 된다
코드 구현 (Python 3)
더보기
def solution(rows, columns, queries):
arr = []; answer = []
# 1. 원래 배열 만들기
for y in range(1, rows+1):
row = []
for x in range(1, columns+1):
row.append((y-1) * columns + x)
arr.append(row)
# print(arr)
# 2. dx, dy 기준으로 swap할 것
# 2-1. 다음 부분 tmp 임시 변수에 저장해두기
# 2-2. 이중 for문 돌기
# a. 지정된 x 범위까지 x 1씩 증가
# b. 지정된 y 범위까지 y 1씩 증가
# c. 지정된 x 범위까지 x 1씩 감소
# d. 지정된 y 범위까지 y 1씩 감소
# 전체 쿼리 돌기
for query in queries:
x1, y1, x2, y2 = query # x1행 y1열
# print(arr[x1-1][y1-1], arr[x2-1][y2-1]) # 해당 범위
dx, dy = 0, 1 # dx, dy 초기화
x, y = x1-1, y1-1 # 초기 좌표
value = arr[x][y]
rotate_nums = []
for _ in range(((y2-y1)+(x2-x1))*2):
# print('dx-dy',dx,dy,",",x+1, y+1, ",", x+dx+1, y+dy+1)
# 아래로
if x + 1 == x1 and y + 1 == y2:
dx = 1; dy = 0
# 왼쪽으로
if x + 1 == x2 and y + 1 == y2:
dx = 0; dy = -1
# 오른쪽으로
if x + 1 == x2 and y + 1 == y1:
dx = -1; dy = 0
# print(dx, dy)
# 다음 좌표에 값 대입
tmp = arr[x+dx][y+dy]
arr[x+dx][y+dy] = value
rotate_nums.append(value)
value = tmp
x += dx; y += dy
# 3. 회전 시마다 회전하는 숫자들 배열에 추가하고, answer에 배열의 최소값 추가할 것
answer.append(min(rotate_nums))
return answer
제출 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드 (0) | 2024.05.21 |
---|---|
[프로그래머스] 단어 변환 (0) | 2024.04.11 |
[프로그래머스] 등굣길 (0) | 2024.04.08 |
[프로그래머스] 조이스틱 (0) | 2024.04.07 |
[프로그래머스] 튜플 (0) | 2024.04.07 |