Skip to content

Commit 30be2a8

Browse files
authored
Merge pull request #248 from AlgorithmStudy-Allumbus/minjeong6
Minjeong / 8월 2주차 / 4문제
2 parents d13edc6 + bb0ae3b commit 30be2a8

File tree

4 files changed

+126
-0
lines changed

4 files changed

+126
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
def dfs(start, cnt):
5+
global chonsu
6+
if start == y:
7+
chonsu = cnt
8+
return
9+
10+
for i in graph[start]:
11+
if not visited[i]:
12+
visited[i] = True
13+
dfs(i, cnt + 1)
14+
visited[i] = False
15+
16+
17+
n = int(input()) # 전체 사람 개수
18+
x, y = map(int, input().split())
19+
graph = [[] for _ in range(n+1)]
20+
visited = [False for _ in range(n + 1)]
21+
chonsu = -1 # 정답으로 반환할 촌수
22+
23+
m = int(input()) # 부모 자식들간의 관계 개수
24+
for _ in range(m):
25+
a, b = map(int, input().split())
26+
graph[a].append(b)
27+
graph[b].append(a)
28+
29+
visited[x] = True
30+
dfs(x, 0)
31+
print(chonsu)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import sys
2+
from collections import deque
3+
4+
input = sys.stdin.readline
5+
6+
# 총 층수 F, 현재 층 S, 목표 층 G, 위 버튼 U, 아래 버튼 D
7+
F, S, G, U, D = map(int, input().split())
8+
9+
10+
def bfs():
11+
if S == G: # 강호가 이미 도착해있다면 0번 클릭
12+
return 0
13+
14+
visited = [False for _ in range(F + 1)]
15+
queue = deque([(S, 1)]) # (현재 층, 버튼 클릭 횟수)
16+
visited[S] = True
17+
18+
while queue:
19+
x, cnt = queue.popleft()
20+
21+
# 위로 이동
22+
nx = x + U
23+
if nx <= F and not visited[nx]:
24+
if nx == G: # 목표층 도착
25+
return cnt
26+
queue.append((nx, cnt + 1))
27+
visited[nx] = True # 방문여부 표시 꼭 넣어주기
28+
29+
# 아래로 이동
30+
nx = x - D
31+
if nx > 0 and not visited[nx]:
32+
if nx == G: # 목표층 도착
33+
return cnt
34+
queue.append((nx, cnt + 1))
35+
visited[nx] = True
36+
37+
# 목표층에 도달하지 못한 경우
38+
return -1
39+
40+
41+
# BFS 탐색
42+
answer = bfs()
43+
if answer == -1:
44+
print("use the stairs")
45+
else:
46+
print(answer)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import sys
2+
from collections import deque
3+
input = sys.stdin.readline
4+
5+
N, K = map(int, input().split())
6+
# 1번부터 N번까지 사람을 큐에 넣기
7+
people = deque([i+1 for i in range(N)])
8+
answer = [] # 제거된 순서를 저장할 리스트
9+
10+
while people:
11+
# K-1번 앞의 원소를 빼서 뒤로 보냄 (원형 이동)
12+
for _ in range(K-1):
13+
cur = people.popleft()
14+
people.append(cur)
15+
# K번째에서 제거
16+
answer.append(people.popleft())
17+
18+
# 정답 출력
19+
print("<" + ", ".join(map(str, answer)) + ">")
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import sys
2+
from collections import deque
3+
input = sys.stdin.readline
4+
5+
# 청설모 K-1마리를 제거하는 함수
6+
def remove():
7+
global squirrels
8+
cnt = K - 1
9+
while cnt > 0 and squirrels: # squirrels이 비지 않았는지 확인
10+
squirrels.popleft()
11+
cnt -= 1
12+
13+
N, K = map(int, input().split())
14+
squirrels = deque([i+1 for i in range(N)]) # 청설모 번호 초기화
15+
answer = 0 # 마지막으로 남는 청설모의 번호
16+
17+
# 청설모가 1마리 남을 때까지 반복
18+
while len(squirrels) > 1:
19+
# 남은 청설모가 K보다 적으면 첫 번째 제외 모두 제거
20+
if len(squirrels) < K:
21+
print(squirrels[0])
22+
exit()
23+
24+
# 첫 번째 청설모를 맨 뒤로 보냄
25+
squirrels.append(squirrels.popleft())
26+
# 첫 번째 청설모를 제외한 K-1마리를 제거
27+
remove()
28+
29+
# 마지막으로 남은 청설모 출력
30+
print(squirrels[0])

0 commit comments

Comments
 (0)