Skip to content

Commit dab07cd

Browse files
committed
codetree.ai 삼성전자 2025 하반기 오후 2번 문제 가로등 설치
문제 링크: https://www.codetree.ai/ko/frequent-problems/all/problems/street-light-installation
1 parent eb5ee0b commit dab07cd

6 files changed

Lines changed: 139 additions & 0 deletions

File tree

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import math
2+
3+
4+
def solve():
5+
cnt_cmds = int(input().strip())
6+
N, M, streetlights = 0, 0, []
7+
8+
for _ in range(cnt_cmds):
9+
tmps = list(map(int, input().strip().split(' ')))
10+
cmd = tmps[0]
11+
12+
if cmd == 100:
13+
N, M = tmps[1], tmps[2]
14+
mx_M = M
15+
16+
for idx in range(len(tmps[3:])):
17+
streetlights.append([idx + 1, tmps[3:][idx]])
18+
elif cmd == 200:
19+
M += 1
20+
mx_M += 1
21+
new_streetlight = [0, 0, M]
22+
for idx in range(len(streetlights) - 1):
23+
if idx == 0:
24+
left, right = 1, streetlights[idx + 1][1]
25+
elif 0 < idx < len(streetlights) - 1:
26+
left, right = streetlights[idx - 1][1], streetlights[idx + 1][1]
27+
28+
local_delta, local_Ln, local_idx = 0, 0, 0
29+
30+
if streetlights[idx][1] - left >= right - streetlights[idx][1]:
31+
local_delta = streetlights[idx][1] - left
32+
local_Ln = math.ceil((left + streetlights[idx][1]) / 2)
33+
local_idx = idx
34+
else:
35+
local_delta = right - streetlights[idx][1]
36+
local_Ln = math.ceil((streetlights[idx][1] + right) / 2)
37+
local_idx = idx + 1
38+
39+
if new_streetlight[0] < local_delta:
40+
new_streetlight[0], new_streetlight[1], new_streetlight[2] = local_delta, local_Ln, local_idx
41+
elif new_streetlight[0] == local_delta:
42+
if new_streetlight[1] > local_Ln:
43+
new_streetlight[0], new_streetlight[1], new_streetlight[2] = local_delta, local_Ln, local_idx
44+
45+
if new_streetlight[2] < len(streetlights):
46+
streetlights = streetlights[0:new_streetlight[2]] + [[mx_M, new_streetlight[1]]] + streetlights[new_streetlight[2]:]
47+
else:
48+
streetlights = streetlights + [[M, new_streetlight[1]]]
49+
50+
elif cmd == 300:
51+
D = tmps[1]
52+
idx = -1
53+
for i in range(len(streetlights)):
54+
if streetlights[i][0] == D:
55+
idx = i
56+
break
57+
58+
streetlights.pop(idx)
59+
M -= 1
60+
61+
elif cmd == 400:
62+
mx_r = 0
63+
for idx in range(len(streetlights)):
64+
if idx == 0:
65+
left, right = 1, streetlights[idx + 1][1]
66+
r = max(streetlights[idx][1] - left, (right - streetlights[idx][1]) / 2)
67+
elif 0 < idx < len(streetlights) - 1:
68+
left, right = streetlights[idx - 1][1], streetlights[idx + 1][1]
69+
r = max((streetlights[idx][1] - left) / 2, (right - streetlights[idx][1]) / 2)
70+
else: # if idx == len(streetlights)-1
71+
left, right = streetlights[idx - 1][1], N
72+
r = max((streetlights[idx][1] - left) / 2, right - streetlights[idx][1])
73+
74+
mx_r = max(mx_r, r)
75+
76+
print(round(mx_r * 2))
77+
78+
79+
if __name__ == '__main__':
80+
solve()
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
9
2+
100 100 3 3 10 90
3+
400
4+
200
5+
200
6+
400
7+
300 3
8+
400
9+
200
10+
400
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
80
2+
40
3+
100
4+
100
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
12
2+
100 10 2 1 10
3+
400
4+
200
5+
400
6+
200
7+
400
8+
200
9+
400
10+
300 3
11+
400
12+
300 1
13+
400
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
9
2+
5
3+
4
4+
3
5+
4
6+
6
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import sys
2+
from pathlib import Path
3+
from unittest import TestCase
4+
from main import solve
5+
6+
7+
class Test(TestCase):
8+
def my_solve(self, testcase_input):
9+
sys.stdin = open(testcase_input, 'r')
10+
stdout = sys.stdout
11+
sys.stdout = open('stdout.txt', 'w')
12+
solve()
13+
sys.stdout.close()
14+
sys.stdout = stdout
15+
16+
def test_solve(self, testcase_number: str):
17+
self.my_solve('test' + testcase_number + '.txt')
18+
self.assertEqual(
19+
Path('test' + testcase_number + '_answer.txt').read_text().strip(),
20+
Path('stdout.txt').read_text().strip())
21+
22+
def test1_solve(self):
23+
self.test_solve('1')
24+
25+
def test2_solve(self):
26+
self.test_solve('2')

0 commit comments

Comments
 (0)