[Programmers] Level 2. 행렬 테두리 회전하기

2022. 12. 1. 00:10·코딩테스트/Python
728x90
반응형

🔗 Problem Link

 

프로그래머스

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

programmers.co.kr


❔Thinking

  • 주어진 직사각형 범위의 테두리를 시계방향으로 회전하고, 이 테두리에서 가장 작은 값들을 출력한다.

💻Solution

def solution(rows, columns, queries):
    answer = []
    matrix = []
    # 행렬 생성
    for i in range(1, rows*columns, columns):
        tmp = []
        for j in range(i, i+columns):
            tmp.append(j)
        matrix.append(tmp)
    # matrix = [[i+(j)*columns for i in range(1,columns+1)] for j in range(rows)]
    
    # 테두리 회전
    for q in queries:
        minimum = rows*columns+1
        x1, y1, x2, y2 = q[0]-1, q[1]-1, q[2]-1, q[3]-1
        tmp = matrix[x1][y1]
        for a in range(x1, x2): # 왼쪽
            if minimum > matrix[a+1][y1]:
                minimum = matrix[a+1][y1]
            matrix[a][y1] = matrix[a+1][y1]
            
        for a in range(y1, y2): # 아래
            if minimum > matrix[x2][a+1]:
                minimum = matrix[x2][a+1]
            matrix[x2][a] = matrix[x2][a+1]
            
        for a in range(x2, x1, -1): # 오른쪽
            if minimum > matrix[a-1][y2]:
                minimum = matrix[a-1][y2]
            matrix[a][y2] = matrix[a-1][y2]
            
        for a in range(y2, y1, -1): # 위
            if minimum > matrix[x1][a-1]:
                minimum = matrix[x1][a-1]
            matrix[x1][a] = matrix[x1][a-1]
        
        if minimum > tmp: # tmp값 삽입
            minimum = tmp
        matrix[x1][y1+1] = tmp
        answer.append(minimum)
    return answer

🗝️keypoint

  1. 행렬의 테두리 회전은 왼쪽, 아래, 오른쪽, 위 로 나누어 생각할 수 있다.
  2. 왼쪽 테두리가 위로 한 칸씩 올라갈 때, 빠지게 되는 값을 따로 저장하고 최종적으로 삽입해야 한다.
  3. 행렬의 테두리를 직접 회전하지 않고, list에 담아 rotate하고 각 자리에 대입하는 방법을 사용할 수 있다.
  4. list와 for문을 사용하면, 반드시 index의 범위를 잘 파악해야 한다.

'코딩테스트 > Python' 카테고리의 다른 글

[Leetcode] 17. Letter Combinations of a Phone Number  (0) 2022.12.02
[Leetcode] 200. Number of Islands  (0) 2022.12.01
[Programmers] Level 3. 가장 먼 노드  (1) 2022.12.01
[Programmers] Level 2. 수식 최대화  (0) 2022.11.29
[Programmers] Level 2. 방금 그 곡  (0) 2022.11.29
'코딩테스트/Python' 카테고리의 다른 글
  • [Leetcode] 17. Letter Combinations of a Phone Number
  • [Leetcode] 200. Number of Islands
  • [Programmers] Level 3. 가장 먼 노드
  • [Programmers] Level 2. 수식 최대화
swwho
swwho
일상을 데이터화하다
  • swwho
    하루한장
    swwho
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • ML_DL (39)
        • MUJAKJUNG (무작정 시리즈) (18)
        • 딥러닝 공부하기 (21)
      • 데이터사이언스 (1)
        • EDA (1)
        • 데이터과학을 위한 통계 (0)
      • 데이터엔지니어링 (2)
      • 논문리뷰 (2)
        • Computer Vision (2)
      • Python 활용하기 (12)
      • 코딩테스트 (127)
        • Python (109)
        • MySQL (14)
      • Git (3)
      • MySQL 활용하기 (0)
      • 일상 이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
swwho
[Programmers] Level 2. 행렬 테두리 회전하기
상단으로

티스토리툴바