๐ŸŒฑ → ๐ŸŒณ

[Baekjoon] 14281. ๋ณผ๋ก ์ˆ˜์—ด - python ๋ณธ๋ฌธ

Algorithms

[Baekjoon] 14281. ๋ณผ๋ก ์ˆ˜์—ด - python

BAY 2023. 10. 2. 21:13
728x90

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

 

14281๋ฒˆ: ๋ณผ๋ก ์ˆ˜์—ด

์ •์ˆ˜ ์ˆ˜์—ด x[0], x[1], ..., x[N-1]์ด ๋ณผ๋ก์ด ๋˜๋ ค๋ฉด ๋ชจ๋“  1 ≤ i ≤ N-2์— ๋Œ€ํ•ด์„œ, x[i-1]+x[i+1] ≥ 2*x[i]๋ฅผ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. ๋˜, ๊ธธ์ด๊ฐ€ 1, 2์ธ ์ˆ˜์—ด์€ ํ•ญ์ƒ ๋ณผ๋กํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 7, 3, 4, 5, 7๊ณผ 4, 2, 1, 3์€ ๋ณผ๋กํ•˜

www.acmicpc.net

๋ฌธ์ œ ์ •๋ณด

๋ฌธ์ œ ์œ ํ˜• ๋‚œ์ด๋„ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„ ํ•ด๊ฒฐ ์œ ๋ฌด ์Šค์Šค๋กœ ๊ตฌํ˜„ ์„ฑ๊ณต

๋ฐฑํŠธ๋ž˜ํ‚น ์‹ค๋ฒ„2 40m o x

์„ค๊ณ„ ๋ฐฉ๋ฒ•

๋ฐฑํŠธ๋ž˜ํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ฝ”๋“œ

์ฒ˜์Œ ์ ‘๊ทผ - ๋ฌด์ž‘์ • ๊ทธ๋ฆฌ๋””

import sys
input = sys.stdin.readline

n = int(input())
arr = list(map(int, input().split()))
cnt = 0

for i in range(1, len(arr)-1):
    print(arr)
    if arr[i-1]+arr[i+1] < 2*arr[i]:
        while arr[i-1]+arr[i+1] < 2*arr[i]:
            arr[i] -= 1 
            cnt += 1

print(cnt)

# ์ด ๊ฒฝ์šฐ๋Š” ๋’ค์˜ ์ˆ˜๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ๋ณผ๋ก์ด ์•ˆ๋˜๊ฒŒ ๋ณ€ํ•  ์ˆ˜ ์žˆ์Œ

๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ์ ‘๊ทผํ•ด์•ผํ•จ์„ ๊นจ๋‹ฌ์Œ

import sys
input = sys.stdin.readline

n = int(input())
arr = list(map(int, input().split()))
cnt = 0

def back(n, arr):
    global cnt
    is_convex = True
    for i in range(1, n-1):
        if arr[i-1]+arr[i+1] < 2*arr[i]:
            while arr[i-1]+arr[i+1] < 2*arr[i]:
              arr[i] -= 1 
              cnt += 1
            is_convex = False
    return cnt, is_convex

while True:
    cnt, is_convex = back(n, arr)
    if is_convex: 
        break
  
print(cnt)

๋ฐ”๊พธ๊ณ  ๋๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, arr[i]-=1 ํ–ˆ์„ ๋•Œ, ์•ž ์ชฝ ์ˆ˜์—ด์ด ๋ณผ๋ก์ด ์•„๋‹ˆ๊ฒŒ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ํ’€์–ด์•ผ ํ–ˆ์Œ

๊ทผ๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚จ

for๋ฌธ์•ˆ์— while๋ฌธ์ด ๋Œ๋ฉด์„œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N^2)์ด ๋จ

์‹œ๊ฐ„์ดˆ๊ณผ ํ•ด๊ฒฐ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

n = int(input())
arr = list(map(int, input().split()))
cnt = 0

def back(n, arr):
    global cnt
    is_convex = True
    for i in range(1, n-1):
        if arr[i-1]+arr[i+1] < 2*arr[i]:
            tmp = arr[i]- (arr[i-1] + arr[i+1])//2
            arr[i] -= tmp
            cnt += tmp
            is_convex = False
    return cnt, is_convex

while True:
    cnt, is_convex = back(n, arr)
    if is_convex: 
        break
  
print(cnt)

while๋ฌธ์„ ๋Œ์ง€ ์•Š๊ณ , 1์”ฉ ๋นผ์•ผ ํ•  ๋งŒํผ ๊ณ„์‚ฐ์„ ํ•ด์คŒ

for๋ฌธ์•ˆ์— ์žˆ๋Š” while๋ฌธ์€ ๋ณ„๋กœ ์•ˆ ๋ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ํ™•์‹คํžˆ ์—ฐ์‚ฐํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ๋งŽ์ด ์žก์•„๋จน๊ตฌ๋‚˜

(๋‹น์—ฐ) O(N)์ด๋‹ˆ ..

์ฐธ๊ณ 

https://velog.io/@jieonyoo/๋ฐฑ์ค€-14281๋ฒˆ-๋ณผ๋ก-์ˆ˜์—ด

728x90