본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 행렬 테두리 회전하기

by ㅣlㅣl 2024. 4. 11.

문제

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