๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] #15970 ํ™”์‚ดํ‘œ ๊ทธ๋ฆฌ๊ธฐ (Python)

KOI

๋ฌธ์ œ ์ดํ•ด


์ง์„  ์œ„์— ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 0, 1, 2, ...์™€ ๊ฐ™์€ ์Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ •์ˆ˜๋“ค์ด ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๋†“์—ฌ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ„์น˜๋“ค ์ค‘ N๊ฐœ์˜ ์œ„์น˜์— ํ•˜๋‚˜์”ฉ ์ ๋“ค์ด ์ฃผ์–ด์ง„๋‹ค(<๊ทธ๋ฆผ 1>). ์ฃผ์–ด์ง„ ์ ๋“ค์˜ ์œ„์น˜๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค. ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” ๋‘ ์ ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜๋“ค์˜ ์ฐจ์ด์ด๋‹ค. <๊ทธ๋ฆผ 1>์—์„œ๋Š” 4๊ฐœ์˜ ์ ์ด ์ฃผ์–ด์ง€๊ณ  ์  a์™€ b์˜ ๊ฑฐ๋ฆฌ๋Š” 3์ด๋‹ค.

&lt;๊ทธ๋ฆผ 1&gt;

 

 

๊ฐ ์ ์€ 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์— ํ•ด๋‹น๋œ๋‹ค.

&lt;๊ทธ๋ฆผ 2&gt;

 

์œ„์˜ ์กฐ๊ฑด์œผ๋กœ ํ™”์‚ดํ‘œ๋ฅผ ๊ทธ๋ฆฌ๋ฉด, ์•„๋ž˜ <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ™์ด ์  a์˜ ํ™”์‚ดํ‘œ๋Š” c๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค. ์  b์™€ d์˜ ํ™”์‚ดํ‘œ๋Š” ๊ฐ๊ฐ d์™€ b๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค. ๋˜ํ•œ ์  c์™€ e์˜ ํ™”์‚ดํ‘œ๋Š” ๊ฐ๊ฐ e์™€ c๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ํ™”์‚ดํ‘œ๋“ค์˜ ๊ธธ์ด ํ•ฉ์€ 3 + 3 + 2 + 3 + 2 = 13์ด๋‹ค.

&lt;๊ทธ๋ฆผ 3&gt;

 

์ ๋“ค์˜ ์œ„์น˜์™€ ์ƒ‰๊น”์ด ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์ ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ํ™”์‚ดํ‘œ๋“ค์˜ ๊ธธ์ด ํ•ฉ์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

ํ’€์ด ์ „๋žต


  1. ์ƒ‰์ด ๊ฐ™์€ ๋ชจ๋“  ์ ๋“ค์„ ์ฐพ๋Š”๋‹ค.
  2. ๊ทธ ์›์†Œ๋“ค์˜ ์œ„์น˜์ •๋ณด๋ฅผ ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ ์•ˆ์— ๋„ฃ์–ด์ค€๋‹ค.
  3. ๊ทธ ๋ฆฌ์ŠคํŠธ๋ฅผ ' ํ™”์‚ดํ‘œ ๊ธธ์ด์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜' ์— ๋„ฃ๋Š”๋‹ค. (๊ฐ™์€ ์ƒ‰์„ ๊ฐ€์ ธ์•ผ๋งŒ ํ™”์‚ดํ‘œ๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Œ)
  4. ์ƒ‰ ๋ณ„๋กœ ์ด ํ•จ์ˆ˜์— ๋„ฃ์–ด์„œ ๋‚˜์˜จ ์ถœ๋ ฅ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•ด์ค€๋‹ค.

 

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)