์ด ๋ฌธ์ ๋ ๊ธฐ์ตํ์ !!
2์ฐจ์์ ๊ณต๊ฐ์ด ์ฃผ์ด์ก์ ๋ ๋ก๋ด์ฒญ์๊ธฐ๊ฐ ํ ๋ฒ์ ๋์์ผ๋ก ์ฒญ์ํ ์ ์๋ ๋ฒ์์ ์๋ฅผ ๊ตฌํ์ฌ๋ผ.
0
์ ์ฒญ์๋์ง ์์ ๊ณต๊ฐ (์ฒญ์๋ฅผ ํ์๋ก ํ๋ ๊ณต๊ฐ)1
์ ๋ฒฝ์ด๋์กฐ๊ฑด
์ ๋ ฅ์ ์์์์น x,y์ขํ์ ๋ฐฉํฅ์ด ์ฃผ์ด์ง๋ค.
๋ฐฉํฅ
์ฒ์์๋ ํ๋ฒํ BFS ์ธ์ค ์์๋๋ฐ ์ค๊ฐ์ค๊ฐ ๊ณ ๋ คํด์ผ ๋๋ ๊ฒ ๋๋ฌด ๋ง์๋ค ใ ใ
๋ฝ์ธํธ 1
์ด๋์ขํ๋ฅผ ์๋์ ๊ฐ์ด ๊ตฌ์ฑํ์ ๋ ๊ฐ ์์น์์ ์ผ์ชฝ์ผ๋ก ํ์ ํ ์ ์๋ ๋ฉ์๋
# ๋ถ ๋ ๋จ ์
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
# ๋ถ -> ์: 0 -> 3
# ๋ -> ๋ถ: 1 -> 0
# ๋จ -> ๋: 2 -> 1
# ์ -> ๋จ: 3 -> 2
def rotate(d):
return (d + 3) % 4
๋ฝ์ธํธ2
๋ฐ๋๋ฐฉํฅ์ผ๋ก ํ ์นธ ์ด๋ํ ์ ์๋ ๋ฉ์๋
# ๋ถ -> ๋จ: 0 -> 2
# ๋ -> ์: 1 -> 3
# ๋จ -> ๋ถ: 2 -> 0
# ์ -> ๋: 3 -> 1
def goback(d):
return (d + 2) % 4
BFS์์ ํ์ ๊ฐ์ ๊ฒ๋ค์ด ๋์ค๋ฉด ๋ง์ด ์ด๋ ต๊ฒ ๋๊ปด์ง๊ณค ํ๋๋ฐ ์ข์ ํ์ด๋ฒ์ ํ๋ ๋ฐฐ์๊ฐ๋ค ใ (๋๋จธ์ง ์ฐ์ฐ !!!!!!!!!!!!!!!!!!!!!!!!!)
์ ์ฒด์ฝ๋
current_r, current_c, current_d = 7, 4, 0
current_room_map = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 1, 1, 1, 1, 0, 1],
[1, 0, 0, 1, 1, 0, 0, 0, 0, 1],
[1, 0, 1, 1, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]
# ๋ถ,๋,๋จ,์
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
# ์ผ์ชฝ ํ์ ๋ฉ์๋
# ๋ถ -> ์ 0 -> 3
# ๋ -> ๋ถ 1 -> 0
# ๋จ -> ์ 2 -> 3
# ์ ->๋จ 3 -> 2
def rotate(d):
return (d + 3) % 4
# ํ์ฌ ๋ฐฉํฅ ๊ธฐ์ค ๋ฐ๋์ชฝ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ ๋ฉ์๋
# ๋ถ -> ๋จ 0 -> 2
# ๋ -> ์ 1 -> 3
# ๋จ -> ๋ถ 2 -> 0
# ์ -> ๋ 3 -> 1
def go_back(d):
return (d+2) % 4
def get_count_of_departments_cleaned_by_robot_vacuum(r, c, d, room_map):
n = len(room_map)
m = len(room_map[0])
res = 0
if room_map[r][c] == 0:
res += 1
room_map[r][c] = -1
q = [(r,c,d)]
while q:
r, c, d = q.pop(0)
d_idx = d
for i in range(4):
d_idx = rotate(d_idx)
nr = r + dr[d_idx]
nc = c + dc[d_idx]
if 0 <= nr < n and 0 <= nc < m and room_map[nr][nc] == 0:
room_map[nr][nc] = -1
q.append((nr, nc, d_idx))
res += 1
break # break๋ฅผ ํด์ฃผ์ง ์์ผ๋ฉด 4๋ฐฉํฅ ์ค ์ฒญ์ ๊ฐ๋ฅํ ์์ญ์ด ์์์๋ ๋ฐ๋ณต๋ฌธ์ ๋ง์ง๋ง์์ ์ฒญ์๋ถ๊ฐ๋ฅ์ด๊ณ ๋ท์ชฝ๋ ๋งํ์๋ค๋ฉด ์ข
๋ฃ๋์ด๋ฒ๋ฆผ
elif i == 3: # 4๋ฒ์งธ ๋ฐฉํฅ ํ์์(๋ง์ง๋ง ํ์) ์ if๋ฌธ์ ๊ฑธ๋ฆฌ์ง ์์๋ค๋ฉด ์ฒญ์๊ฐ๋ฅํ ์ง์ญ์ด ์๋๋ผ๋ ๊ฒ์ด๋ฏ๋ก ๋ค์ชฝ ์ด๋ํ๋ค (๋ฐฉํฅ์ ์ง)
d_idx = go_back(d)
nr = r + dr[d_idx]
nc = c + dc[d_idx]
q.append((nr, nc, d))
if room_map[nr][nc] == 1: # ๋ค์ชฝ๋ฐฉํฅ์ด ๋ฒฝ์ผ๋ก ๋งํ ๊ฒฝ์ฐ
return res
return res
# 57 ๊ฐ ์ถ๋ ฅ๋์ด์ผ ํฉ๋๋ค!
print(get_count_of_departments_cleaned_by_robot_vacuum(current_r, current_c, current_d, current_room_map))
์ฝํ ์ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์ ๋์ค์ง ์๊ฒ ์ง๋ง ํธ์ค์ค์ค์ฅ์๋ ๋์์ ๋ ๋ชป ํ๋ฉด ๋๋ฌด ์ฐฝํผํ๋๊น ...
์ต๋๊ณต์ฝ์? โก๏ธ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ!!
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
def get_gcd(a, b):
if b == 0:
return a
return get_gcd(b, a % b)
์ต์๊ณต๋ฐฐ์? โก๏ธ (๋ ์์ ๊ณฑ) / ์ต๋๊ณต์ฝ์
print((a*b)//gcd)
์ ์ฒด์ฝ๋
def get_gcd(a, b):
if b == 0:
return a
return get_gcd(b, a % b)
a, b = map(int, input().split())
gcd = get_gcd(a, b)
print(gcd)
print((a*b)//gcd)
๊ฐ์ ๊ฐ์ง๊ณ ํ๋ ์ด๋ถํ์
๋ณดํต ์ด๋ถํ์์ ์ฌ์ฉํ๋ ๋ง์ ๋ฌธ์ ๋ค์ด ์ ๋ ฌ๋ ๋ฆฌ์คํธ์ ์ค๊ฐ๊ฐ์ ์ก๊ณ ํ ์ชฝ์ผ๋ก ํ์ ์์ญ์ ์ค์ฌ๊ฐ๋ ๋ฐฉ์์ธ๋ฐ ์ด๋ฒ ๋ฌธ์ ๋ ๋ฆฌ์คํธ๊ฐ ์๋ ํน์ ๊ฐ์ ๊ฐ์ง๊ณ ์ด๋ถํ์์ ํ๋ค. (์ด๊ฒ๋ ๋ณดํต์ธ๊ฐ .. ?)
๋ชฉ์ฌ์ ๋จ๊ธฐ์ ๋์ด (mid
)๋ฅผ ์ต๋๊ฐ ์ชฝ ํน์ ์ต์๊ฐ ์ชฝ์ผ๋ก ์ค์ฌ๊ฐ๋ฉฐ ํ์ํ๋ค.
n, m = map(int, input().split())
trees = list(map(int, input().split()))
# minh: 1 (๋๋ฌด์ ์ต์๋์ด๋ 1)
# maxh: ํ์ฌ ๋๋ฌด ์ค ์ต๊ณ ๋์ด
minh, maxh = 1, max(trees)
while minh <= maxh:
mid = (minh + maxh) // 2 # ๋ชฉ์ฌ์ ๋จ๊ธฐ์ ๋์ด
tmp = 0 # ๋ฒ๋ชฉ๋๋ ๋๋ฌด๋ค์ ๊ธธ์ด์ ํฉ
for t in trees:
if t > mid: # ๋ฒ๋ชฉ๋๋ ๋์ด์ ํด๋นํ๋ ๋๋ฌด๋ง ๋ฒ๋ชจ๋๋๋ก
tmp = tmp + (t - mid)
# mid์ ๋์ด๋ก ๋ฒ๋ชฉํ ๊ฒฐ๊ณผ ๋ชฉํ๋ก ํ ๊ธธ์ด๋ณด๋ค ํฐ ๊ฒฝ์ฐ
if tmp >= m:
minh = mid + 1 # ์ต์๊ฐ์ ์ค๊ฐ๊ฐ+1๋ก ๊ฐฑ์ ํด์ ๋ ๋์ ๋์ด์์ ๋ฒ๋ชฉ๋์ด ๋ ์์ ๊ธธ์ด๊ฐ ๋ฒ๋ชฉ๋๋๋ก ํ๋ค.
else:
maxh = mid - 1 # ์ต๋๊ฐ์ ์ค๊ฐ๊ฐ+1๋ก ๊ฐฑ์ ํด์ ๋ ๋ฎ์ ๋์ด์์ ๋ฒ๋ชฉ๋์ด ๋ ํฐ ๊ธธ์ด๊ฐ ๋ฒ๋ชฉ๋๋๋ก ํ๋ค.
print(maxh)