[Bronze I] Title: 달팽이2, Time: 40 ms, Memory: 32544 KB -BaekjoonHub
This commit is contained in:
92
백준/Bronze/1952. 달팽이2/README.md
Normal file
92
백준/Bronze/1952. 달팽이2/README.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# [Bronze I] 달팽이2 - 1952
|
||||
|
||||
[문제 링크](https://www.acmicpc.net/problem/1952)
|
||||
|
||||
### 성능 요약
|
||||
|
||||
메모리: 32544 KB, 시간: 40 ms
|
||||
|
||||
### 분류
|
||||
|
||||
구현, 수학, 시뮬레이션
|
||||
|
||||
### 제출 일자
|
||||
|
||||
2025년 4월 7일 19:52:58
|
||||
|
||||
### 문제 설명
|
||||
|
||||
<p>M줄 N칸으로 되어 있는 표 위에, 달팽이 모양으로 선을 그리려고 한다.</p>
|
||||
|
||||
<table class="table table-bordered" style="width:9%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:3%">ㅇ</td>
|
||||
<td style="width:3%"> </td>
|
||||
<td style="width:3%"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>위의 그림은 M=5, N=3의 예이다. 이제 표의 왼쪽 위 칸(ㅇ)에서 시작하여, 오른쪽으로 선을 그려 나간다. 표의 바깥 또는 이미 그려진 칸에 닿아서 더 이상 이동할 수 없게 되면, 시계방향으로 선을 꺾어서 그려나간다.</p>
|
||||
|
||||
<table class="table table-bordered" style="width:9%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:3%">ㅇ</td>
|
||||
<td style="width:3%">→</td>
|
||||
<td style="width:3%">↘</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>↗</td>
|
||||
<td>↘</td>
|
||||
<td>↓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>↑</td>
|
||||
<td>↓</td>
|
||||
<td>↓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>↑</td>
|
||||
<td>끝</td>
|
||||
<td>↓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>↖</td>
|
||||
<td>←</td>
|
||||
<td>↙</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>위의 표는 선을 그려 나간 모양을 나타낸 것이다. 선이 꺾어진 부분은 대각선으로 나타내었다. 표의 모든 칸이 채워질 때까지, 선을 몇 번 꺾게 될까?</p>
|
||||
|
||||
### 입력
|
||||
|
||||
<p>첫째 줄에 M과 N이 빈 칸을 사이에 두고 주어진다. (2 ≤ M, N ≤ 100)</p>
|
||||
|
||||
### 출력
|
||||
|
||||
<p>첫째 줄에 표의 모든 칸이 채워질 때까지 선이 꺾어지는 횟수를 출력한다.</p>
|
||||
|
||||
40
백준/Bronze/1952. 달팽이2/달팽이2.py
Normal file
40
백준/Bronze/1952. 달팽이2/달팽이2.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# 입력
|
||||
M, N = map(int, input().split())
|
||||
|
||||
# 방문 표시용 배열
|
||||
visited = [[False] * N for _ in range(M)]
|
||||
|
||||
# 방향: 오른쪽 → 아래 → 왼쪽 → 위
|
||||
dx = [0, 1, 0, -1]
|
||||
dy = [1, 0, -1, 0]
|
||||
|
||||
# 시작점
|
||||
x, y = 0, 0
|
||||
visited[x][y] = True
|
||||
|
||||
# 초기 방향: 오른쪽 (0)
|
||||
dir = 0
|
||||
|
||||
# 꺾은 횟수
|
||||
turn_count = 0
|
||||
|
||||
# 총 칸 수
|
||||
total_cells = M * N
|
||||
visited_cells = 1
|
||||
|
||||
while visited_cells < total_cells:
|
||||
nx = x + dx[dir]
|
||||
ny = y + dy[dir]
|
||||
|
||||
# 이동할 수 없는 경우 (벽이거나 이미 방문)
|
||||
if nx < 0 or nx >= M or ny < 0 or ny >= N or visited[nx][ny]:
|
||||
dir = (dir + 1) % 4 # 방향 전환
|
||||
turn_count += 1
|
||||
continue # 방향만 바꾸고 다시 시도
|
||||
|
||||
# 이동
|
||||
x, y = nx, ny
|
||||
visited[x][y] = True
|
||||
visited_cells += 1
|
||||
|
||||
print(turn_count)
|
||||
Reference in New Issue
Block a user