[Bronze I] Title: 달팽이2, Time: 40 ms, Memory: 32544 KB -BaekjoonHub

This commit is contained in:
SSUM
2025-04-07 19:53:29 +09:00
parent 3403a1289b
commit 68ba0ee008
2 changed files with 132 additions and 0 deletions

View 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>

View 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)