Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- web-view
- redux state값 유지
- php-1
- 고고학 최고의 발견
- 부산 맛집 OPEN API
- 블로그 뉴비
- 드림핵
- url 랜더링
- Dreamhack
- 사업계획서
- 오블완
- expo
- 새로고침
- 꿀팁 환영
- React
- API 활용 신청
- 보안
- 코딩테스트
- 훈수 가능
- 개발
- 공공데이터 포털
- apk 빌드
- 창업 300
- python
- level3
- 프로그래머스
- 티스토리챌린지
- react-router-dom
- Redux
Archives
- Today
- Total
1223v
[BOJ] Python 백준 소용돌이 예쁘게 출력하기(1022) 본문
https://www.acmicpc.net/problem/1022
달팽이 구현 문제이다.
우선 (r2-r1+1) * (c2-c1+1) 배열을 만들어주고, 그 배열이 다 채워질때까지 달팽이 코드를 돌리면 된다.
달팽이 코드
상하 중 하나 양옆중 하나를 움직이고 length가 늘어나는 특징을 지닌다.
즉, 2번은 움직임이 같고 이후 한개씩 늘린다.
그 과정에서 같은 길이를 2번 방향이 달리하게 움직여줘야 하니 한번 length 만큼 루프를 돌고 방향전환 후 한번더 루프를 돈다.
length 루프 내부는 계속 ni, nj 값을 계속 증가시키며 움직여주고, 만약, (r2-r1+1) * (c2-c1+1) 이 배열 내부를 지나간다면, 정답배열에 cnt 값을 갱신해준다.
출력
이후, cnt의 값이 정답배열에 최종적으로 입력된 값의 길이가 얼마나 되는지를 계산하고, 이가 부족한 값들은 .rjust(필요한 길이 (m)) 만큼 증가시키면서 출력하면 된다.
import sys
input = sys.stdin.readline
r1,c1,r2,c2 = map(int,input().split())
graph = [[0] * (c2-c1+1) for _ in range(r2-r1+1)]
total = (r2-r1+1) * (c2-c1+1)
di = [0,-1,0,1]
dj = [1,0,-1,0]
cnt = 1
ni,nj = 0,0
length = 1
direction = 0
while total >0:
for _ in range(2):
for _ in range(length):
if r1 <= ni <= r2 and c1 <= nj <= c2:
graph[ni-r1][nj-c1] = cnt
total -= 1
m = cnt
ni += di[direction]
nj += dj[direction]
cnt += 1
direction = (direction + 1) % 4
length += 1
m_len = len(str(m))
for i in range(r2-r1+1):
for j in range(c2-c1+1):
print(str(graph[i][j]).rjust(m_len), end=' ')
print()
회고,
공백을 어떻게 채울지 몰랐고, r1 <= ni <= r2 and c1 <= nj <= c2 범위 내에 들어왔을때, 그 부분에서 graph[ni-r1][nj-c1] = cnt 이런식으로 빼주고 넣어줘야 배열 나열이 잘 되는데 이점을 생각치못했다...
728x90
'PS' 카테고리의 다른 글
[BOJ] Python, Ruby 백준 고양이는 많을수록 좋다 (27961) (0) | 2025.02.11 |
---|---|
[Programmers] Python 프로그래머스 스타 수열(70130) (0) | 2025.02.06 |
[BOJ] Python, Ruby 백준 N-Queen(9663) (0) | 2025.02.04 |
[BOJ] Ruby 백준 게똥벌레(3020) (0) | 2025.02.02 |
[BOJ] Python, Ruby 백준 빙산(2573) (0) | 2025.02.02 |