문제
세로 길이 N, 가로 길이 M 인 2차원 배열이 주어진다.
이 배열의 테두리가 시계방향으로 한 칸 씩 밀린 배열을 출력하여라.
여기서 테두리란 배열의 상하좌우 끝 줄을 의미한다.
입력
첫 줄에 N, M 이 주어진다.
두 번째 줄부터 N 줄에 걸쳐 각 줄에 M 개씩 배열의 수가 주어진다.
(3 ≤ N, M ≤ 100, 1 ≤ 수열을 구성하는 수 ≤ N x M)
출력
밀기가 끝난 배열을 출력한다.
입력의 예 1
3 5
2 3 1 1 4
1 3 2 3 4
1 2 7 3 7
출력의 예 1
1 2 3 1 1
1 3 2 3 4
2 7 3 7 4
입력의 예 2
4 4
1 2 4 2
3 4 1 7
8 3 1 6
9 8 9 7
출력의 예 2
3 1 2 4
8 4 1 2
9 3 1 7
8 9 7 6
입력의 예 3
3 5
1 3 4 2 4
1 2 5 8 7
6 4 5 2 7
출력의 예 3
1 1 3 4 2
6 2 5 8 4
4 5 2 7 7
입력의 예 4
6 5
7 1 3 5 4
2 3 4 8 3
2 1 4 7 9
9 8 5 3 1
2 3 6 7 4
1 4 3 2 5
출력의 예 4
2 7 1 3 5
2 3 4 8 4
9 1 4 7 3
2 8 5 3 9
1 3 6 7 1
4 3 2 5 4
풀이
- 오른쪽 상단, 오른쪽 하단, 왼쪽 하단, 왼쪽 상단을 각각 플래그로 삼고(시계방향)
- 각 꼭지점에 도달하는 경우 x, y 좌표 증가 또는 감소
- 시작은 0, 1에서부터 시작하고
- 오른쪽 끝(0)에 도달할때 까지 y값 증가
- 오른쪽 하단(1)에 도달할 때 까지 x값 증가
- 왼쪽 하단(2)에 도달할떄 까지 y값 감소
- 왼쪽 상단(1)에 도달할 떄 까지 x값 증가
- 내부 값은 이전껄로 현재를 덮고, 현재꺼는 다시 prev에 저장해서 다음에 씀 이런 느낌.....
def border_turn(row, colum) :
vertext_x = [0, row-1, row-1, 0] #오른쪽 상단, 오른쪽 하단, 왼쪽 하단, 왼쪽 상단(시계방향)
vertext_y = [colum-1, colum-1, 0, 0]
flag = 0 #방향 전환을 위한 플러그 인덱스
prev = data_list[0][0]
next_x, next_y = 0, 1 #0, 1부터 시작
while flag < 4 :
if next_x == vertext_x[flag] and next_y == vertext_y[flag] : #각 꼭지점에 도달한 경우 flag 1추가 해서 방향 전환
flag += 1
# temp = data_list[next_x][next_y] #현재 저장
# data_list[next_x][next_y] = prev #현재에 이전껄저장
# prev = temp #이전꺼에 현재꺼 저장
data_list[next_x][next_y], prev = prev, data_list[next_x][next_y] #이전껄로 현재를 덮고, 현재꺼는 다시 prev에 저장해서 다음에 씀
if flag == 0 :
next_y += 1
if flag == 1 :
next_x += 1
if flag == 2 :
next_y -= 1
if flag == 3:
next_x -= 1
if __name__ == "__main__":
row, colum = map(int, input().split())
data_list = []
for i in range(row) :
data_list.append(list(map(int, input().split())))
border_turn(row, colum) #row, colum받아서 테두리 회전
for i in range(row) :
print(" ".join(map(str, data_list[i]))) #출력
'코테풀이 > 구현' 카테고리의 다른 글
공기청정기 - N칸 확산(마름모 만들기) (0) | 2022.02.15 |
---|---|
공기청정기 - 1차원 확산 (0) | 2022.02.15 |
[백준 | 실버5] 2578:빙고 (0) | 2022.01.06 |
[알고리즘랩스] 3. 완전탐색_offset(4방향 체크, 구현) (0) | 2022.01.06 |
[알고리즘랩스]반복문&배열_array3(대각선 출력) (0) | 2022.01.04 |
공기청정기-2차원 밀기(이차원 리스트 시계방향 테두리 회전)