From 68ba0ee008dad0d82941e009fe3cc564df8d18dc Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Mon, 7 Apr 2025 19:53:29 +0900 Subject: [PATCH] =?UTF-8?q?[Bronze=20I]=20Title:=20=EB=8B=AC=ED=8C=BD?= =?UTF-8?q?=EC=9D=B42,=20Time:=2040=20ms,=20Memory:=2032544=20KB=20-Baekjo?= =?UTF-8?q?onHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Bronze/1952. 달팽이2/README.md | 92 ++++++++++++++++++++++++++++ 백준/Bronze/1952. 달팽이2/달팽이2.py | 40 ++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 백준/Bronze/1952. 달팽이2/README.md create mode 100644 백준/Bronze/1952. 달팽이2/달팽이2.py diff --git a/백준/Bronze/1952. 달팽이2/README.md b/백준/Bronze/1952. 달팽이2/README.md new file mode 100644 index 0000000..e5e97c1 --- /dev/null +++ b/백준/Bronze/1952. 달팽이2/README.md @@ -0,0 +1,92 @@ +# [Bronze I] 달팽이2 - 1952 + +[문제 링크](https://www.acmicpc.net/problem/1952) + +### 성능 요약 + +메모리: 32544 KB, 시간: 40 ms + +### 분류 + +구현, 수학, 시뮬레이션 + +### 제출 일자 + +2025년 4월 7일 19:52:58 + +### 문제 설명 + +
M줄 N칸으로 되어 있는 표 위에, 달팽이 모양으로 선을 그리려고 한다.
+ +| ㅇ | ++ | + |
| + | + | + |
| + | + | + |
| + | + | + |
| + | + | + |
위의 그림은 M=5, N=3의 예이다. 이제 표의 왼쪽 위 칸(ㅇ)에서 시작하여, 오른쪽으로 선을 그려 나간다. 표의 바깥 또는 이미 그려진 칸에 닿아서 더 이상 이동할 수 없게 되면, 시계방향으로 선을 꺾어서 그려나간다.
+ +| ㅇ | +→ | +↘ | +
| ↗ | +↘ | +↓ | +
| ↑ | +↓ | +↓ | +
| ↑ | +끝 | +↓ | +
| ↖ | +← | +↙ | +
위의 표는 선을 그려 나간 모양을 나타낸 것이다. 선이 꺾어진 부분은 대각선으로 나타내었다. 표의 모든 칸이 채워질 때까지, 선을 몇 번 꺾게 될까?
+ +### 입력 + +첫째 줄에 M과 N이 빈 칸을 사이에 두고 주어진다. (2 ≤ M, N ≤ 100)
+ +### 출력 + +첫째 줄에 표의 모든 칸이 채워질 때까지 선이 꺾어지는 횟수를 출력한다.
+ diff --git a/백준/Bronze/1952. 달팽이2/달팽이2.py b/백준/Bronze/1952. 달팽이2/달팽이2.py new file mode 100644 index 0000000..e87c444 --- /dev/null +++ b/백준/Bronze/1952. 달팽이2/달팽이2.py @@ -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)