땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • I
  • E
  • D
  • 이것이 리눅스다 with Rocky Linux9
  • ㅗ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원
Algorithm/Algorithm Problem

백준 16926 배열 돌리기 1(구현) ★

Algorithm/Algorithm Problem

백준 16926 배열 돌리기 1(구현) ★

2022. 6. 4. 18:07

https://www.acmicpc.net/problem/16926

 

16926번: 배열 돌리기 1

크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]

www.acmicpc.net

● 배열을 돌리기 위한 다양한 방법 중에 deque.rotate()를 사용하는 방법을 택했다.

 

● 2차원의 배열을 1차원으로 바꿔준다음에 rotate()를 돌리면 된다.

 

● 반시계 방향이기때문에 순서에 유의하며 1차원으로 바꿔주고 몇번 회전을 시킬껀지 rotate(r) 해준다.

 

● 똑같은 순서에 맞춰서 deque.popleft()를 하며 값을 꺼내서 저장해주면 가장자리의 회전이 끝난다.

 

● 가장자리 후 그 안의 있는 배열에 대한 접근은 시작지점 (x,y)가 (x+1,y+1)이 되고 width,height는 -2씩 된다.

 

● width, height 둘 중 하나가 0이 되면 끝나면 회전을 멈추게 된다.

 

from collections import deque

n,m,r = list(map(int,input().split()))
data = [list(map(int,input().split())) for _ in range(n)]

x,y = 0,0
width = m
height = n

#x,y : 배열 왼쪽 상단
#반시계 기준
def rotate(x,y,width,height):
    queue = deque()

    for i in range(y,y+width): #좌
        queue.append(data[x+height-1][i])

    for i in range(x+height-2,x,-1): #상
        queue.append(data[i][y+width-1])

    for i in range(y+width-1,y,-1): #우
        queue.append(data[x][i])

    for i in range(x,x+height-1): #하
        queue.append(data[i][y])

    queue.rotate(r)

    for i in range(y,y+width): #좌
        data[x+height-1][i] = queue.popleft()

    for i in range(x+height-2,x,-1): #상
        data[i][y+width-1] = queue.popleft()

    for i in range(y+width-1,y,-1): #우
        data[x][i]  = queue.popleft()

    for i in range(x,x+height-1): #하
        data[i][y]  = queue.popleft()

while True:
    if not width or not height:
        break
    rotate(x,y,width,height)
    x += 1
    y += 1
    width -= 2
    height -= 2

for i in data:
    print(*i)

 

 

 

 

 

'Algorithm > Algorithm Problem' 카테고리의 다른 글

백준 9421 소수상근수(소수)  (0) 2022.06.26
백준 2872 우리집엔 도서관이 있어(그리디)  (0) 2022.06.08
백준 1461 도서관(구현, 그리디)  (0) 2022.06.03
백준 16943 숫자 재배치(순열, 구현)  (0) 2022.06.03
백준 1911 흙길 보수하기(구현,그리디)  (0) 2022.06.03
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 9421 소수상근수(소수)
    • 백준 2872 우리집엔 도서관이 있어(그리디)
    • 백준 1461 도서관(구현, 그리디)
    • 백준 16943 숫자 재배치(순열, 구현)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.