KOI
๋ฌธ์ ์ดํด
์ง์ ์์ ์์น๋ฅผ ๋ํ๋ด๋ 0, 1, 2, ...์ ๊ฐ์ ์์๊ฐ ์๋ ์ ์๋ค์ด ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ๋์ฌ ์๋ค. ์ด๋ฌํ ์์น๋ค ์ค N๊ฐ์ ์์น์ ํ๋์ฉ ์ ๋ค์ด ์ฃผ์ด์ง๋ค(<๊ทธ๋ฆผ 1>). ์ฃผ์ด์ง ์ ๋ค์ ์์น๋ ๋ชจ๋ ๋ค๋ฅด๋ค. ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ ๋ ์ ์ ์์น๋ฅผ ๋ํ๋ด๋ ์๋ค์ ์ฐจ์ด์ด๋ค. <๊ทธ๋ฆผ 1>์์๋ 4๊ฐ์ ์ ์ด ์ฃผ์ด์ง๊ณ ์ a์ b์ ๊ฑฐ๋ฆฌ๋ 3์ด๋ค.
๊ฐ ์ ์ N๊ฐ์ ์๊น ์ค ํ๋๋ฅผ ๊ฐ์ง๋ค. ํธ์์, ์๊น์ 1๋ถํฐ N๊น์ง์ ์๋ก ํ์ํ๋ค.
๊ฐ ์ p์ ๋ํด์, p์์ ์์ํ๋ ์ง์ ํ์ดํ๋ฅผ ์ด์ฉํด์ ๋ค๋ฅธ ์ q์ ์ฐ๊ฒฐํ๋ ค๊ณ ํ๋ค. ์ฌ๊ธฐ์, ์ q๋ p์ ๊ฐ์ ์๊น์ ์ ๋ค ์ค p์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ด์ด์ผ ํ๋ค. ๋ง์ฝ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ด ๋ ๊ฐ ์ด์์ด๋ฉด ์๋ฌด๊ฑฐ๋ ํ๋๋ฅผ ์ ํํ๋ค.
๋ชจ๋ ์ ์ ๋ํด์ ๊ฐ์ ์๊น์ ๊ฐ์ง ๋ค๋ฅธ ์ ์ด ํญ์ ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ๊ฐ ์ p์์ ์์ํ์ฌ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ q๋ก ๊ฐ๋ ํ๋์ ํ์ดํ๋ฅผ ํญ์ ๊ทธ๋ฆด ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์ ๋ค์ ์์์ (์์น, ์๊น) ๋ก ํ์ํ ๋, a = (0,1), b = (1, 2), c = (3, 1), d = (4, 2), e = (5, 1)๋ผ๊ณ ํ์.
์๋ <๊ทธ๋ฆผ 2>์์ ์ด ์ ๋ค์ ํ์ํ๋ค. ์ฌ๊ธฐ์ ํฐ์์ 1, ๊ฒ์์์ 2์ ํด๋น๋๋ค.
์์ ์กฐ๊ฑด์ผ๋ก ํ์ดํ๋ฅผ ๊ทธ๋ฆฌ๋ฉด, ์๋ <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ์ด ์ a์ ํ์ดํ๋ c๋ก ์ฐ๊ฒฐ๋๋ค. ์ b์ d์ ํ์ดํ๋ ๊ฐ๊ฐ d์ b๋ก ์ฐ๊ฒฐ๋๋ค. ๋ํ ์ c์ e์ ํ์ดํ๋ ๊ฐ๊ฐ e์ c๋ก ์ฐ๊ฒฐ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ํ์ดํ๋ค์ ๊ธธ์ด ํฉ์ 3 + 3 + 2 + 3 + 2 = 13์ด๋ค.
์ ๋ค์ ์์น์ ์๊น์ด ์ฃผ์ด์ง ๋, ๋ชจ๋ ์ ์์ ์์ํ๋ ํ์ดํ๋ค์ ๊ธธ์ด ํฉ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
ํ์ด ์ ๋ต
- ์์ด ๊ฐ์ ๋ชจ๋ ์ ๋ค์ ์ฐพ๋๋ค.
- ๊ทธ ์์๋ค์ ์์น์ ๋ณด๋ฅผ ํ๋์ ๋ฆฌ์คํธ ์์ ๋ฃ์ด์ค๋ค.
- ๊ทธ ๋ฆฌ์คํธ๋ฅผ ' ํ์ดํ ๊ธธ์ด์ ํฉ์ ๊ณ์ฐํ๋ ํจ์' ์ ๋ฃ๋๋ค. (๊ฐ์ ์์ ๊ฐ์ ธ์ผ๋ง ํ์ดํ๋ฅผ ๊ทธ๋ฆด ์ ์์)
- ์ ๋ณ๋ก ์ด ํจ์์ ๋ฃ์ด์ ๋์จ ์ถ๋ ฅ๊ฐ์ ๋ชจ๋ ๋ํด์ค๋ค.
Source Code
#๊ฐ์ ์๊น์ ๊ฐ์ง ์์๋ค์ ํ์ดํ ์ด๊ธธ์ด๋ฅผ ๊ณ์ฐํ๋ ํจ์
def distance(a):
leng = 0
for i in range(len(a)):
if i == 0:#๋งจ์
leng += abs(a[i] - a[i + 1])
elif i == len(a) - 1: #๋งจ๋ค
leng += abs(a[i] - a[i - 1])
else:
# i + 1 ๊ณผ i - 1 ๊น์ง์ ์ฐจ์ด๋ฅผ ๋น๊ตํด์ ์์ ์น๊ตฌ๋ฅผ ์ฑํ
leng += min(abs(a[i] - a[i - 1]), abs(a[i] - a[i + 1]))
return leng
#main
n = int(input()) #์ ์ ๊ฐฏ์
answer = 0 #์ถ๋ ฅ๊ฐ ๋ณ์
arr_swp = [] #์ ์ ์ ๋ณด๋ฅผ ๋ฎ์ ๋ฆฌ์คํธ
for i in range(n):
loc, clr = map(int, input().split())
arr_swp.append([clr, loc]) #[[1, 0], [2, 1], [1, 3], [2, 4], [1, 5]]
arr_swp.sort() #[[1, 0], [1, 3], [1, 5], [2, 1], [2, 4]]
#d
#์์ ๊ฐฏ์
num_clr = arr_swp[-1][0]
for i in range(1,num_clr+1):#์์ ๊ฐฏ์๋ 1๋ถํฐ ์กด์ฌ
same_clr = [] #๊ฐ์ ์์ธ ์ ๋ค์ ์์น์ ๋ณด๋ฅผ ๋ชจ์ผ๋ ๋ฆฌ์คํธ
for j in range(n): #์์์ ๊ฐฏ์ ๋งํผ ๋ฐ๋ณต
if arr_swp[j][0] == i:
same_clr.append(arr_swp[j][1])
answer += distance(same_clr)
print(answer)
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] #18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (Python) (0) | 2022.01.18 |
---|---|
[๋ฐฑ์ค] #15922 ์์ฐ์ผ ์ฐ์์ผ์ด์ผ!! (Python) (0) | 2021.05.18 |
[๋ฐฑ์ค] #2529 ๋ถ๋ฑํธ (Python) (0) | 2021.05.18 |
[๋ฐฑ์ค] #14501 ํด์ฌ (Python) (0) | 2021.05.18 |
[๋ฐฑ์ค] #1764 ๋ฃ๋ณด์ก (Python) (0) | 2021.03.15 |