Skip to content

Commit 2d6fd5d

Browse files
committed
solved(python): programmers
- 연습문제 / 숫자 변환하기
1 parent 92f1fae commit 2d6fd5d

4 files changed

Lines changed: 74 additions & 0 deletions

File tree

programmers/python/연습문제/숫자_변환하기/__init__.py

Whitespace-only changes.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from collections import deque
2+
3+
4+
def solution(x: int, y: int, n: int) -> int:
5+
queue, visited = deque([(0, x)]), set()
6+
7+
while queue:
8+
step, num = queue.popleft()
9+
if num in visited or num > y:
10+
continue
11+
12+
if num == y:
13+
return step
14+
15+
visited.add(num)
16+
queue.append((step + 1, num + n))
17+
queue.append((step + 1, num * 2))
18+
queue.append((step + 1, num * 3))
19+
20+
return -1
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
[
2+
{
3+
"params": [
4+
10,
5+
40,
6+
5
7+
],
8+
"expected": 2
9+
},
10+
{
11+
"params": [
12+
10,
13+
40,
14+
30
15+
],
16+
"expected": 1
17+
},
18+
{
19+
"params": [
20+
2,
21+
5,
22+
4
23+
],
24+
"expected": -1
25+
}
26+
]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import json
2+
import os
3+
import unittest
4+
5+
from parameterized import parameterized
6+
7+
from .main import solution
8+
9+
10+
def load_sample(filename: str):
11+
path = os.path.join(os.path.dirname(os.path.abspath(__file__)), filename)
12+
13+
with open(path, "r") as file:
14+
return [(case["params"], case["expected"]) for case in json.load(file)]
15+
16+
17+
class TestCase(unittest.TestCase):
18+
@parameterized.expand(load_sample("sample.json"))
19+
def test_case(self, params: list, expected: any):
20+
# When
21+
result = solution(*params)
22+
23+
# Then
24+
self.assertEqual(expected, result)
25+
26+
27+
if __name__ == "__main__":
28+
unittest.main()

0 commit comments

Comments
 (0)