λ°±μ€€

λ°±μ€€ 27210 신을 λͺ¨μ‹œλŠ” 사당 - 파이썬

stoneeee 2023. 1. 14. 23:45

 

 

https://www.acmicpc.net/problem/27210

 

27210번: 신을 λͺ¨μ‹œλŠ” 사당

μΉ ν•  수 μžˆλŠ” λŒμƒμ˜ κ°œμˆ˜μ— μ œν•œμ€ μ—†μœΌλ©°, λ°˜λ“œμ‹œ μ—°μ†ν•œ(μΈμ ‘ν•œ) λŒμƒλ“€λ§Œ μΉ ν•  수 있음(띄엄띄엄 μΉ ν•  수 μ—†μŒ)에 μœ μ˜ν•˜λΌ.

www.acmicpc.net

 

 

 

μ›ν‹°λ“œ μ‡Όλ―Έλ”μ½”λ“œ 3회차 문제 쀑 ν’€μ΄μ—λŠ” κ°€μž₯ 짧은 μ‹œκ°„μ΄ λ“€μ—ˆμ§€λ§Œ, μ½”λ“œκ°€ κ°€μž₯ μžμ‹  μ—†λŠ” λ¬Έμ œμ΄λ‹€.

 

 

 

 

μš°μ„ , λŒμƒμ΄ μ™Όμͺ½μ„ 보고 μžˆμ„ λ•ŒλŠ” λˆ„μ κ°’μ— 1을 더해주고, λŒμƒμ΄ 였λ₯Έμͺ½μ„ 보고 μžˆμ„ λ•ŒλŠ” 1을 λΉΌμ£ΌλŠ” λ°©μ‹μœΌλ‘œ λˆ„μ κ°’(curr λ³€μˆ˜)을 κ³„μ‚°ν–ˆλ‹€.

 

μ˜ˆμ‹œλ₯Ό ν•˜λ‚˜ λ§Œλ“€μ–΄λ³΄μžλ©΄, λˆ„μ κ°’μ„ μ•„λž˜μ™€ 같이 계산할 수 μžˆλ‹€.

 

인덱슀 : 0  1  2  3  4  5  6  7  8  9 10
λ°©  ν–₯ :    μ™Ό 였 μ™Ό μ™Ό 였 였 였 였 였 μ™Ό
λˆ„μ κ°’ : 0  1  0  1  2  1  0 -1 -2 -3 -2

 

이 λˆ„μ κ°’μ„ μ΄μš©ν•΄μ„œ a번 λŒμƒλΆ€ν„° b번 λŒμƒκΉŒμ§€μ˜ κΉ¨λ‹¬μŒμ˜ 양을 ꡬ할 수 μžˆλ‹€.

 

1번 λŒμƒμ˜ κΉ¨λ‹¬μŒμ˜ 양은 abs(λˆ„μ κ°’[1] - λˆ„μ κ°’[0])인 1이닀. (μ™Ό)

2~4번 λŒμƒμ˜ κΉ¨λ‹¬μŒμ˜ 양은 abs(λˆ„μ κ°’[4] - λˆ„μ κ°’[1])인 1이닀. (μ˜€μ™Όμ™Ό == μ™Όμ˜€μ™Όμ™Ό - μ™Ό)

8~10번 λŒμƒμ˜ κΉ¨λ‹¬μŒμ˜ 양은 abs(λˆ„μ κ°’[10] - λˆ„μ κ°’[7])인 1이닀. (μ˜€μ˜€μ™Ό == μ™Όμ˜€μ™Όμ™Όμ˜€μ˜€μ˜€μ˜€μ™Ό - μ™Όμ˜€μ™Όμ™Όμ˜€μ˜€μ˜€)

 

이걸 ν™œμš©ν•΄μ„œ κΉ¨λ‹¬μŒμ˜ μ΅œλŒ“κ°’λ„ ꡬ할 수 μžˆλ‹€.

 

 

 

 

 

계산을 νŽΈν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ μ§€κΈˆκΉŒμ§€μ˜ λˆ„μ κ°’μ˜ μ΅œλŒ“κ°’(max_sum)κ³Ό μ΅œμ†Ÿκ°’(min_sum)도 계산해 μ€€λ‹€.

 

인덱슀 : 0  1  2  3  4  5  6  7  8  9 10
λ°©  ν–₯ :    μ™Ό 였 μ™Ό μ™Ό 였 였 였 였 였 μ™Ό
λˆ„μ κ°’ : 0  1  0  1  2  1  0 -1 -2 -3 -2
--------------------------------------------
졜  λŒ€ : 0  1  1  1  2  2  2  2  2  2  2
졜  μ†Œ : 0  1  0  0  0  0  0 -1 -2 -3 -3
--------------------------------------------
κΉ¨λ‹¬μŒ :    0  1  1  2  1  2  3  4  5  4

 

μ§€κΈˆ λŒμƒμ„ ν¬ν•¨μ‹œμΌœ κΈˆμΉ μ„ ν–ˆμ„ λ•Œ κΉ¨λ‹¬μŒμ˜ μ΅œλŒ“κ°’μ€ abs(max_sum - curr), abs(curr - min_sum)의 μ΅œλŒ“κ°’μ΄λ‹€.

 

μ˜ˆμ‹œμ—μ„œ 정닡은 κΉ¨λ‹¬μŒμ΄ 5κ°€ λ˜λ„λ‘ 5번 석상 ~ 9번 석상을 μΉ ν•˜λŠ” κ²½μš°μ΄λ‹€...

 

 

 

 

N = int(input())
stones = list(map(int, input().split()))

curr, answer = 0, 0 # μ§€κΈˆκΉŒμ§€ λˆ„μ κ°’ / κΉ¨λ‹¬μŒμ˜ μ΅œλŒ“κ°’
min_sum, max_sum = 0, 0 # μ§€κΈˆκΉŒμ§€ λˆ„μ κ°’μ˜ μ΅œμ†Ÿκ°’, μ΅œλŒ“κ°’

for stone in stones:
    if stone == 1: # μ™Όμͺ½λ³΄λŠ” λŒμƒ
        curr += 1
    elif stone == 2: # 였λ₯Έμͺ½ λ³΄λŠ” λŒμƒ
        curr -= 1
	
    # μ΅œλŒ€ κΉ¨λ‹¬μŒ κ°±μ‹ 
    answer = max(answer, abs(curr - min_sum))
    answer = max(answer, abs(max_sum - curr))
    
    # μ΅œμ†Ÿκ°’, μ΅œλŒ“κ°’ κ°±μ‹ 
    min_sum = min(min_sum, curr)
    max_sum = max(max_sum, curr)

print(answer)

 

 

κ°œλ…μ μœΌλ‘œλŠ” λˆ„μ ν•©μ„ μƒκ°ν•˜κ³  ν’€μ—ˆκ³ , λˆ„μ ν•©μ΄λΌκ³  μƒκ°ν•˜λŠ”λ°... 이게 λˆ„μ ν•©μ΄ 아닐 μˆ˜λ„ 있고....

μŠ€νƒμ„ μ•ˆ λ§Œλ“€μ—ˆλ‹€ 뿐이지 λΉ„μŠ·ν•œ λ°©λ²•μœΌλ‘œ μŠ€νƒ 풀이도 κ°€λŠ₯ν•  것 κ°™λ‹€. 아닐 μˆ˜λ„ 있고...