Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발계발

프로그래머스 - 행렬 테두리 회전하기(77485) 본문

알고리즘

프로그래머스 - 행렬 테두리 회전하기(77485)

Ju_Nik_E 2024. 4. 30. 11:50

이번에도 문제 설명은 생략

https://school.programmers.co.kr/learn/courses/30/lessons/77485

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

접근 방식

1. rows * columns 크기의 2차원 배열을 만든다.

2. queries의 query를 통해 그래프를 회전시킴(함수 따로 빼기)

3. 돌리면서 최소값을 갱신시켜 최소값 반환

 

풀이코드

def rotate_graph(graph, query):
    x1 = query[0]-1
    y1 = query[1]-1
    x2 = query[2]-1
    y2 = query[3]-1
    
    tmp = graph[x1][y1]
    min_value = tmp
    
    for x in range(x1, x2):
        graph[x][y1] = graph[x + 1][y1]
        min_value = min(min_value, graph[x + 1][y1])
        
    for y in range(y1, y2):
        graph[x2][y] = graph[x2][y + 1]
        min_value = min(min_value, graph[x2][y + 1])
    
    for x in range(x2, x1, -1):
        graph[x][y2] = graph[x - 1][y2]
        min_value = min(min_value, graph[x - 1][y2])
    
    for y in range(y2, y1 + 1, -1):
        graph[x1][y] = graph[x1][y - 1]
        min_value = min(min_value, graph[x1][y - 1])
        
    graph[x1][y1 + 1] = tmp

    return min_value

def solution(rows, columns, queries):
    answer = []
    graph = []
    
    for i in range(rows):
        tmp = []
        for j in range(columns):
            tmp.append(i * columns + (j + 1))
        graph.append(tmp)
    
    for query in queries:
        answer.append(rotate_graph(graph, query))
        
    return answer

 

주의사항

1. 회전 시 맨 처음 시작값을 기록해둬야 한다.
2. 시계방향으로 회전시키는 경우 아래 그림의 순서에 맞게 돌려야한다.
3. 마지막 회전은 +1 해줘야 한다.(아래 그림의 1-1번에서 회전된 값이 돌아오는 것 방지)
4. 시작값을 마지막에 대입해줘야 한다.
결론 : 시작값의 위치 기억해놓고, 시작위치 먼저 값을 새롭게 대입할 수 있게 회전!