Skip to content

Commit 97ed0c7

Browse files
committed
solved(python): programmers
- 2023 현대모비스 알고리즘 경진대회 예선 / 에어컨
1 parent b18025d commit 97ed0c7

File tree

4 files changed

+142
-0
lines changed

4 files changed

+142
-0
lines changed

programmers/python/2023_현대모비스_알고리즘_경진대회_예선/에어컨/__init__.py

Whitespace-only changes.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import math
2+
3+
from typing import List
4+
5+
6+
def solution(temperature: int, t1: int, t2: int, a: int, b: int, onboard: List[int]) -> int:
7+
dp = [[math.inf for _ in range(-11, 42)] for _ in range(len(onboard))]
8+
dp[0][temperature] = 0
9+
10+
for time, customer in enumerate(onboard):
11+
for temp in range(-10, 41):
12+
if customer and not t1 <= temp <= t2:
13+
dp[time][temp] = math.inf
14+
continue
15+
16+
dp[time][temp] = min(
17+
dp[time][temp],
18+
dp[time - 1][temp] + b,
19+
dp[time - 1][temp - 1] + a,
20+
dp[time - 1][temp + 1] + a,
21+
dp[time - 1][temp] if temp == temperature else math.inf,
22+
dp[time - 1][temp - 1] if temp - 1 < temperature else math.inf,
23+
dp[time - 1][temp + 1] if temp + 1 > temperature else math.inf,
24+
)
25+
26+
return int(min(dp[-1]))
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
[
2+
{
3+
"params": [
4+
28,
5+
18,
6+
26,
7+
10,
8+
8,
9+
[
10+
0,
11+
0,
12+
1,
13+
1,
14+
1,
15+
1,
16+
1
17+
]
18+
],
19+
"expected": 40
20+
},
21+
{
22+
"params": [
23+
-10,
24+
-5,
25+
5,
26+
5,
27+
1,
28+
[
29+
0,
30+
0,
31+
0,
32+
0,
33+
0,
34+
1,
35+
0
36+
]
37+
],
38+
"expected": 25
39+
},
40+
{
41+
"params": [
42+
11,
43+
8,
44+
10,
45+
10,
46+
1,
47+
[
48+
0,
49+
1,
50+
1,
51+
1,
52+
1,
53+
1,
54+
1,
55+
0,
56+
0,
57+
0,
58+
1,
59+
1
60+
]
61+
],
62+
"expected": 20
63+
},
64+
{
65+
"params": [
66+
11,
67+
8,
68+
10,
69+
10,
70+
100,
71+
[
72+
0,
73+
1,
74+
1,
75+
1,
76+
1,
77+
1,
78+
1,
79+
0,
80+
0,
81+
0,
82+
1,
83+
1
84+
]
85+
],
86+
"expected": 60
87+
}
88+
]
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)