728x90
1022번: 소용돌이 예쁘게 출력하기
첫째 줄에 네 정수 r1, c1, r2, c2가 주어진다.
www.acmicpc.net
🤔 문제분석
회전하는 로직을 구현하는것이 이문제의 핵심이다. 회전은 아래의 사진과 같이 이루어진다.
i가 (2, 3, 4, 5 … ) 1씩 증가하면서 두번씩 (좌 or 우), (상 or 하) 움직인다. 그것을 방향은 방향을 다움직이고나서 다음 방향으로 전환 시켜주면 된다.
회전 구현이 다 끝났다면 이제 문제에 조건이 맞는 길이를 맞추어주면 끝
💻 코드
import sys
input = sys.stdin.readline
r1, c1, r2, c2 = map(int, input().split())
R = r2 - r1 + 1
C = c2 - c1 + 1
fill_cnt = R*C
table = [[0 for _ in range(C)] for _ in range(R)]
moves = [(0, 1), (-1, 0), (0, -1), (1, 0)] # right, up, left, down
def chage_dir(dir):
if dir == 3:
return 0
else:
return dir + 1
y = - r1
x = - c1
i = 1
cnt = 1
dir = 0
max_length = 0
while fill_cnt > 0:
for _ in range(2):
for _ in range(i):
if R > y >=0 and C > x >=0:
max_length = len(str(cnt))
table[y][x] = str(cnt)
fill_cnt -= 1
y += moves[dir][0]
x += moves[dir][1]
cnt += 1
dir = chage_dir(dir)
i += 1
for i in range(R):
for j in range(C):
length = len(table[i][j])
if max_length > length:
table[i][j] = ' '*(max_length-length) + table[i][j]
for t in table:
print(*t)
🎯 피드백 및 개선사항
회전을 구현하는것만 잘하면 어렵지 않은 문제입니다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1600번 : 말이 되고픈 원숭이 (1) | 2024.03.05 |
---|---|
[백준] 20056번 : 마법사 상어와 파이어볼 (0) | 2024.03.03 |
[백준] 2931번 : 가스관 (0) | 2024.03.03 |
[백준] 1036번 : 36진수 (0) | 2024.03.02 |
[백준] 18809번 : Gaaaaaaaaaarden (0) | 2024.03.02 |