https://www.acmicpc.net/problem/16926
이 문제에서 접근해야할 것은
크게 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
수동으로 구하지 않고
queue를 써서 깔끔하게 코드를 구현한 경우도 있으니
참고하시면 공부에 도움이 되실 겁니다.
[백준 7569번 ] 토마토 2(파이썬) (0) | 2022.06.30 |
---|---|
[백준 7576] 토마토(파이썬) (0) | 2022.06.22 |
[백준 22858번] 원상복구(small) (python) (2) | 2022.06.07 |
[백준 14467번] 소가 길을 건너간 이유1(python) (0) | 2022.06.07 |
[백준 17144번] 미세먼지 안녕!(파이썬) (0) | 2022.04.27 |
댓글 영역