상세 컨텐츠

본문 제목

[백준 16926번] 배열돌리기1(python)

알고리즘 공부

by Tabris4547 2022. 6. 9. 11:35

본문

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

이 문제에서 접근해야할 것은 

크게 2가지입니다.

 

1. 배열을 외부만 돌려주는 걸

어떻게 할 것인가.

 

2. 밖에 큰 거 돌려주고

안에 작은 건 어떻게 돌려줄것인가.

예시 1의 경우로 본 경우.

먼저, 외부의 사격형을 돌려주고

그 다음 안의 사격형을 돌려줘야합니다.

 

1. 돌려주는 경우.

저는 좌 하 우 상으로 나눠서

바꿔줄 걸 임시로 지정한 다음

돌려주었습니다.

(자세한 건 후술할 코드를 보면 이해가 되실 겁니다.)

 

2. 어떻게 안까지 들어가지?

저렇게 안으로 들어간다는 걸

직접 손으로 그리면서 발견했습니다.

처음에는 0,0 그 다음은 1,1 그 다음은 2,2....

이 값은 배열의 크기 중

가장 작은거 /2 해준 값까지 계속 됩니다.

왜 가장 작은걸로 기준을 잡았나요?

이렇게 직사각형인 경우를 직접 그려보면

이해하시기 쉬울 겁니다.

 

#백준 16926번 배열 돌리기1

N,M,R=map(int,input().split())

com=[list(map(int,input().split()))for _ in range(N)]

for k in range(R):
    s=min(N,M)//2
    for j in range(s):
        x,y=j,j
        pre=com[x][y]
        #좌

        for i in range(x+1,N-j):

            tmp=com[i][j]
            com[i][j]=pre
            pre=tmp

        #하

        for i in range(y+1,M-j):

            tmp=com[N-1-j][i]
            com[N-1-j][i]=pre
            pre=tmp

        #우

        for i in range(N-j-2,j-1,-1):

            tmp=com[i][M-1-j]
            com[i][M-1-j]=pre
            pre=tmp
        #상

        for i in range(M-2-j,j-1,-1):

            tmp=com[j][i]
            com[j][i]=pre
            pre=tmp


for i in range(N):
    for j in range(M):
        print(com[i][j],end=' ')
    print()

https://dallae7.tistory.com/158

 

[파이썬] 백준 16926 배열 돌리기 1, 16927 배열 돌리기 2

[배열돌리기 2] 문제링크 https://www.acmicpc.net/problem/169267 배열돌리기 1을 할 때는 원본 배열을 copy해서 돌렸는데 한번 돌릴때마다 계속 배열을 복사해야 하다보니 시간이 오래걸렸다. 배열돌리기 2

dallae7.tistory.com

수동으로 구하지 않고

queue를 써서 깔끔하게 코드를 구현한 경우도 있으니

참고하시면 공부에 도움이 되실 겁니다.

728x90

관련글 더보기

댓글 영역