dev/algorithm
BOJ / 1697๋ฒ / ์จ๋ฐ๊ผญ์ง [Go][Python3]
crscnt
2021. 3. 17. 21:00
๐ฉ๐ป๐ป ๋ฌธ์
1697๋ฒ: ์จ๋ฐ๊ผญ์ง
์๋น์ด๋ ๋์๊ณผ ์จ๋ฐ๊ผญ์ง์ ํ๊ณ ์๋ค. ์๋น์ด๋ ํ์ฌ ์ N(0 ≤ N ≤ 100,000)์ ์๊ณ , ๋์์ ์ K(0 ≤ K ≤ 100,000)์ ์๋ค. ์๋น์ด๋ ๊ฑท๊ฑฐ๋ ์๊ฐ์ด๋์ ํ ์ ์๋ค. ๋ง์ฝ, ์๋น์ด์ ์์น๊ฐ X์ผ
www.acmicpc.net
โ๐ป ํ์ด
๐จ Go
// https://www.acmicpc.net/problem/1697
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n, k int
fmt.Fscanln(reader, &n, &k)
var visited = make([]int, 100001)
bfs(visited, n, k)
fmt.Fprintln(writer, visited[k])
}
func bfs(visited []int, start, end int) {
var queue = []int{start}
for len(queue) > 0 {
curPos := queue[0]
if curPos == end {
break
}
queue = queue[1:]
if curPos-1 >= 0 && visited[curPos-1] == 0 {
queue = append(queue, curPos-1)
visited[curPos-1] += (visited[curPos] + 1)
}
if curPos+1 <= 100000 && visited[curPos+1] == 0 {
queue = append(queue, curPos+1)
visited[curPos+1] += (visited[curPos] + 1)
}
if curPos*2 <= 100000 && visited[curPos*2] == 0 {
queue = append(queue, curPos*2)
visited[curPos*2] += (visited[curPos] + 1)
}
}
}
๐จ Python3
# https://www.acmicpc.net/problem/1697
import sys
def bfs(visited, start, end):
queue = [start]
while len(queue) > 0:
cur_pos = queue.pop(0)
if cur_pos == end:
break
if cur_pos-1 >= 0 and visited[cur_pos-1] == 0:
queue.append(cur_pos-1)
visited[cur_pos-1] += (visited[cur_pos]+1)
if cur_pos+1 <= 100000 and visited[cur_pos+1] == 0:
queue.append(cur_pos+1)
visited[cur_pos+1] += (visited[cur_pos]+1)
if cur_pos*2 <= 100000 and visited[cur_pos*2] == 0:
queue.append(cur_pos*2)
visited[cur_pos*2] += (visited[cur_pos]+1)
if __name__ == "__main__":
n, k = list(map(int, sys.stdin.readline().split()))
visited = [0 for _ in range(100001)]
bfs(visited, n, k)
print(visited[k])
728x90