반응형
롯데V3
롯데 우승하는 그날까지 개발...ing
롯데V3
전체 방문자
오늘
어제
  • 분류 전체보기 (216)
    • Computer Science (0)
      • 운영체제 (0)
    • Problem Solving (160)
      • 프로그래머스 (93)
      • 백준 (60)
      • 리트코드 (2)
      • SQL (5)
    • 언어 (8)
      • 파이썬 (8)
    • 취준 (1)
      • 합격후기 (1)
    • 도서 리뷰 (21)
      • IT 도서 리뷰 (20)
      • 기타 도서 리뷰 (1)
    • 논문 리뷰 (1)
    • 회고 (5)
      • TIL (5)
    • 머신러닝 (9)
      • 통계 (3)
      • 전처리 (1)
      • 클러스터링 (3)
    • 딥러닝 (3)
      • 자연어처리 (1)
      • LLM (1)
    • 프로젝트 (5)
    • Util (0)
    • Tool (1)
      • Poetry (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 티스토리챌린지
  • DP

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
롯데V3

롯데 우승하는 그날까지 개발...ing

Problem Solving/백준

배열 돌리기 1(16926번) - 파이썬(Python)

2022. 6. 5. 17:59
728x90
반응형

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

문제

크기가 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]
   ↓         ↓                   ↑         ↑
A[3][1]   A[3][2] → A[3][3] → A[3][4]   A[3][5]
   ↓                                       ↑
A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5]

예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다.

1 2 3 4       2 3 4 8       3 4 8 6
5 6 7 8       1 7 7 6       2 7 8 2
9 8 7 6   →   5 6 8 2   →   1 7 6 3
5 4 3 2       9 5 4 3       5 9 5 4
 <시작>         <회전1>        <회전2>

배열과 정수 R이 주어졌을 때, 배열을 R번 회전시킨 결과를 구해보자.

입력

첫째 줄에 배열의 크기 N, M과 수행해야 하는 회전의 수 R이 주어진다.

둘째 줄부터 N개의 줄에 배열 A의 원소 Aij가 주어진다.

출력

입력으로 주어진 배열을 R번 회전시킨 결과를 출력한다.

예제

Example 1:

Input: 
4 4 2
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Output: 
3 4 8 12
2 11 10 16
1 7 6 15
5 9 13 14

Example 2:

Input: 
5 4 7
1 2 3 4
7 8 9 10
13 14 15 16
19 20 21 22
25 26 27 28
Output: 
28 27 26 25
22 9 15 19
16 8 21 13
10 14 20 7
4 3 2 1

Example 3:

Input:
2 2 3
1 1
1 1
Output:
1 1
1 1

조건

시간 제한 : 1초

메모리 제한 : 512 MB

풀이과정

풀이 1

일일이 돌리다보니 시간이 오래걸렸다.

import sys

input = sys.stdin.readline

n, m, r = map(int, input().split())

graph = []

for _ in range(n):
    graph.append(list(map(int, input().split())))

cnt = (min(len(graph), len(graph[0]))) // 2

def rotate(graph):
    ngraph = [[0]*m for _ in range(n)]

    for i in range(cnt):
        n1 = (i, i)
        n2 = (n-1-i,i)
        n3 = (n-1-i,m-1-i)
        n4 = (i,m-1-i)

        # n1 -> n2
        x, y = n1
        nx, ny = n2
        for k in range(x, nx):
            ngraph[k+1][y] = graph[k][y]

        # n2 -> n3
        x, y = n2
        nx, ny = n3
        for k in range(y, ny):
            ngraph[x][k+1] = graph[x][k]

        # n3 -> n4
        x, y = n3
        nx, ny = n4
        for k in range(x, nx, -1):
            ngraph[k-1][y] = graph[k][y]

        # n4 -> n1
        x, y = n4
        nx, ny = n1
        for k in range(y, ny, -1):
            ngraph[x][k-1] = graph[x][k]
    return ngraph

for _ in range(r):
    graph = rotate(graph)

for g in graph:
    print(" ".join(list(map(str,g))))

 

풀이 2

n,m,r = map(int, input().split())
a = [list(map(int,input().split())) for _ in range(n)]
groups = []
groupn = min(n,m)//2
for k in range(groupn):
    group = []
    for j in range(k, m-k):
        group.append(a[k][j])
    for i in range(k+1,n-k-1):
        group.append(a[i][m-k-1])
    for j in range(m-k-1,k,-1):
        group.append(a[n-k-1][j])
    for i in range(n-k-1,k,-1):
        group.append(a[i][k])
    groups.append(group)

for k in range(groupn):
    group = groups[k]
    l = len(group)
    index = r%l
    for j in range(k, m-k):
        a[k][j] = group[index]
        index = (index+1)%l
    for i in range(k+1, n-k-1):
        a[i][m-k-1] = group[index]
        index = (index+1)%l
    for j in range(m-k-1,k,-1):
        a[n-k-1][j] = group[index]
        index = (index+1)%l
    for i in range(n-k-1,k,-1):
        a[i][k] = group[index]
        index = (index+1)%l

for row in a:
    print(' '.join(map(str,row)))
728x90
반응형
저작자표시 (새창열림)

'Problem Solving > 백준' 카테고리의 다른 글

배열 돌리기 3(16935번) - 파이썬(Python)  (0) 2022.06.05
주사위 굴리기(14499번) - 파이썬(Python)  (0) 2022.06.05
톱니바퀴(14891번) - 파이썬(Python)  (0) 2022.06.05
경사로(14890번) - 파이썬(Python)  (0) 2022.06.05
드래곤 커브(15685번) - 파이썬(Python)  (0) 2022.06.05
    'Problem Solving/백준' 카테고리의 다른 글
    • 배열 돌리기 3(16935번) - 파이썬(Python)
    • 주사위 굴리기(14499번) - 파이썬(Python)
    • 톱니바퀴(14891번) - 파이썬(Python)
    • 경사로(14890번) - 파이썬(Python)
    롯데V3
    롯데V3

    티스토리툴바