25418번: 정수 a를 k로 만들기
7(A), 8(연산 1), 9(연산 1), 18(연산 2), 19(연산 1), 38(연산 2), 76(연산 2), 77(연산 1)이 최소 연산이므로 정답은 7이다.
www.acmicpc.net
✏️ 풀이
입력으로 a, k가 주어지는데 그냥 a를 k로 만드는 최소 연산 횟수를 출력하는 것이다. 최소, 최단 이런 단어가 보이면 이제는 바로 BFS로 풀면 되겠다는 생각을 한다. 뭐 아닐 수 도 있겠지만, 그건 많이 풀어보면 BFS구나, 아니구나를 판단할 수 있을 것이라고 믿는다.
큐에는 시작과 연산 횟수를 넣었다. 그렇게 연산을 하면 cnt를 증가 시키고, k에 도달하면 출력을 하고 끝을 낸다. BFS의 개념만 알면 금방 풀 수 있는 문제라서 쉽게 풀 수 있었다.
💻 코드
import sys; input = sys.stdin.readline
from collections import deque
start, dest = map(int, input().split())
q = deque([(start, 0)])
visited = set([start])
while q:
cur, cnt = q.popleft()
if cur == dest:
print(cnt)
break
cnt += 1
if cur*2 <= dest and cur*2 not in visited:
q.append((cur*2, cnt))
visited.add(cur*2)
if cur+1 <= dest and cur+1 not in visited:
q.append((cur+1, cnt))
visited.add(cur+1)
'PS > 백준' 카테고리의 다른 글
[백준] 2589 - 보물섬 (0) | 2024.04.13 |
---|---|
[백준] 5430 - AC (2) | 2024.01.11 |
[백준] 2583 - 영역 구하기 (0) | 2024.01.11 |
실버2 색종이 만들기(2630) (1) | 2024.01.01 |
실버1 z(1074) (1) | 2023.12.31 |
25418번: 정수 a를 k로 만들기
7(A), 8(연산 1), 9(연산 1), 18(연산 2), 19(연산 1), 38(연산 2), 76(연산 2), 77(연산 1)이 최소 연산이므로 정답은 7이다.
www.acmicpc.net
✏️ 풀이
입력으로 a, k가 주어지는데 그냥 a를 k로 만드는 최소 연산 횟수를 출력하는 것이다. 최소, 최단 이런 단어가 보이면 이제는 바로 BFS로 풀면 되겠다는 생각을 한다. 뭐 아닐 수 도 있겠지만, 그건 많이 풀어보면 BFS구나, 아니구나를 판단할 수 있을 것이라고 믿는다.
큐에는 시작과 연산 횟수를 넣었다. 그렇게 연산을 하면 cnt를 증가 시키고, k에 도달하면 출력을 하고 끝을 낸다. BFS의 개념만 알면 금방 풀 수 있는 문제라서 쉽게 풀 수 있었다.
💻 코드
import sys; input = sys.stdin.readline
from collections import deque
start, dest = map(int, input().split())
q = deque([(start, 0)])
visited = set([start])
while q:
cur, cnt = q.popleft()
if cur == dest:
print(cnt)
break
cnt += 1
if cur*2 <= dest and cur*2 not in visited:
q.append((cur*2, cnt))
visited.add(cur*2)
if cur+1 <= dest and cur+1 not in visited:
q.append((cur+1, cnt))
visited.add(cur+1)
'PS > 백준' 카테고리의 다른 글
[백준] 2589 - 보물섬 (0) | 2024.04.13 |
---|---|
[백준] 5430 - AC (2) | 2024.01.11 |
[백준] 2583 - 영역 구하기 (0) | 2024.01.11 |
실버2 색종이 만들기(2630) (1) | 2024.01.01 |
실버1 z(1074) (1) | 2023.12.31 |