๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/9465)
<์คํฐ์ปค>
๋ฌธ์
์๊ทผ์ด์ ์ฌ๋์ ์๋ฅ์ด๋ ๋ฌธ๋ฐฉ๊ตฌ์์ ์คํฐ์ปค 2n๊ฐ๋ฅผ ๊ตฌ๋งคํ๋ค. ์คํฐ์ปค๋ ๊ทธ๋ฆผ (a)์ ๊ฐ์ด 2ํ n์ด๋ก ๋ฐฐ์น๋์ด ์๋ค. ์๋ฅ์ด๋ ์คํฐ์ปค๋ฅผ ์ด์ฉํด ์ฑ ์์ ๊พธ๋ฏธ๋ ค๊ณ ํ๋ค.
์๋ฅ์ด๊ฐ ๊ตฌ๋งคํ ์คํฐ์ปค์ ํ์ง์ ๋งค์ฐ ์ข์ง ์๋ค. ์คํฐ์ปค ํ ์ฅ์ ๋ผ๋ฉด, ๊ทธ ์คํฐ์ปค์ ๋ณ์ ๊ณต์ ํ๋ ์คํฐ์ปค๋ ๋ชจ๋ ์ฐข์ด์ ธ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ์ฆ, ๋ ์คํฐ์ปค์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์, ์๋์ ์๋ ์คํฐ์ปค๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ชจ๋ ์คํฐ์ปค๋ฅผ ๋ถ์ผ ์ ์๊ฒ๋ ์๋ฅ์ด๋ ๊ฐ ์คํฐ์ปค์ ์ ์๋ฅผ ๋งค๊ธฐ๊ณ , ์ ์์ ํฉ์ด ์ต๋๊ฐ ๋๊ฒ ์คํฐ์ปค๋ฅผ ๋ผ์ด๋ด๋ ค๊ณ ํ๋ค. ๋จผ์ , ๊ทธ๋ฆผ (b)์ ๊ฐ์ด ๊ฐ ์คํฐ์ปค์ ์ ์๋ฅผ ๋งค๊ฒผ๋ค. ์๋ฅ์ด๊ฐ ๋ ์ ์๋ ์คํฐ์ปค์ ์ ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์ฆ, 2n๊ฐ์ ์คํฐ์ปค ์ค์์ ์ ์์ ํฉ์ด ์ต๋๊ฐ ๋๋ฉด์ ์๋ก ๋ณ์ ๊ณต์ ํ์ง ์๋ ์คํฐ์ปค ์งํฉ์ ๊ตฌํด์ผ ํ๋ค.
์์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ์ ์ ์๊ฐ 50, 50, 100, 60์ธ ์คํฐ์ปค๋ฅผ ๊ณ ๋ฅด๋ฉด, ์ ์๋ 260์ด ๋๊ณ ์ด ๊ฒ์ด ์ต๋ ์ ์์ด๋ค. ๊ฐ์ฅ ๋์ ์ ์๋ฅผ ๊ฐ์ง๋ ๋ ์คํฐ์ปค (100๊ณผ 70)์ ๋ณ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์, ๋์์ ๋ ์ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ n (1 ≤ n ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ๋ ์ค์๋ n๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ์ ์๋ ๊ทธ ์์น์ ํด๋นํ๋ ์คํฐ์ปค์ ์ ์์ด๋ค. ์ฐ์ํ๋ ๋ ์ ์ ์ฌ์ด์๋ ๋น ์นธ์ด ํ๋ ์๋ค. ์ ์๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค ๋ง๋ค, 2n๊ฐ์ ์คํฐ์ปค ์ค์์ ๋ ๋ณ์ ๊ณต์ ํ์ง ์๋ ์คํฐ์ปค ์ ์์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- ์ด๊ธฐ ์ฝ๋: ํ๋ ธ์ต๋๋ค
import sys
if __name__ =='__main__':
T=int(input())
side=[0,1]
for i in range(T):
arr = []
n=int(input())
arr.append(list(map(int, sys.stdin.readline().split())))
arr.append(list(map(int, sys.stdin.readline().split())))
answer=0
result_a=[arr[0][0]]
check=1
for j in range(1,n-1):
temp=result_a[-1]+arr[side[check]][j]
if temp+arr[side[check-1]][j+1]>result_a[-1]+arr[side[check]][j+1]:
result_a.append(temp)
if check==0:
check=1
else:
check=0
else:
if j==n-2:
result_a.append(result_a[-1]+arr[side[check]][n-1])
answer=result_a[-1]
result_a=[arr[1][0]]
check=0
for j in range(1,n-1):
temp=result_a[-1]+arr[side[check]][j]
if temp+arr[side[check-1]][j+1]>result_a[-1]+arr[side[check]][j+1]:
result_a.append(temp)
if check==0:
check=1
else:
check=0
else:
if j==n-2:
result_a.append(result_a[-1]+arr[side[check]][n-1])
if answer>=result_a[-1]:
print(answer)
else:
print(result_a[-1])
๋ด๊ฐ ๊ตฌํํ๊ณ ๋ด๊ฐ ์ ์ถํ์ง๋ง ์ง๊ธ ์๊ฐํด๋ ์๋ง์ธ ์ฝ๋๋ค
์ฒ์ ์๊ฐํ ๋ฐฉ์์ ์๋์ ๊ฐ๋ค.
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋๊ฐ์ ์ ์คํฐ์ปค๋ฅผ ๋ํ์ ๋์ ๋๊ฐ์ ์ ๋ฐ์ด๋๊ณ ๋๊ฐ์ ์์ ์คํฐ์ปค ์ ์๋ฅผ ๋ํ์๋์ ์ ์๋ฅผ ๋น๊ตํ์ฌ
๋ฆฌ์คํธ์ ๋ฃ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๋ค.
์์ ๋์ฌ ์๋ฅผ ๊ณ ๋ คํด์ ๊ณ์ฐํ๋ค๋ ๊ฒ์ ํ๋ ๋ฐฉ๋ฒ์ด์๋ค. ๋ง๋ ๊ฒ ๊ฐ์ผ๋ฉด์๋ ํ๋ ธ๊ธฐ ๋๋ฌธ์ด๋ค.
- my solution
import sys
if __name__ =='__main__':
T=int(input()) # ํ
์คํธ ์ผ์ด์ค
for i in range(T):
arr = [] # ์คํฐ์ปค ์ ์
n=int(input())
arr.append(list(map(int, sys.stdin.readline().split())))
arr.append(list(map(int, sys.stdin.readline().split())))
dp=[[arr[0][0]],[arr[1][0]]]
for j in range(1,n):
if j==1:
dp[0].append(dp[1][0]+arr[0][j])
dp[1].append(dp[0][0]+arr[1][j])
else:
dp[0].append(max(arr[0][j]+dp[1][j-1], arr[0][j]+dp[1][j-2]))
dp[1].append(max(arr[1][j]+dp[0][j-1], arr[1][j]+dp[0][j-2]))
if dp[0][-1]>=dp[1][-1]: # ์ต๋๊ฐ ์ถ๋ ฅ
print(dp[0][-1])
else:
print(dp[1][-1])
๋ค์ ๊ตฌํํ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
๊ทธ๋ฆผ (a)์ ๋น์ทํด ๋ณด์ด์ง๋ง ํ์ดํ์ ๋ฐฉํฅ์ ๋ณด๋ฉด ๋ค๋ฅธ ๊ฒ์ ์ ์ ์๋ค. ์์ ๊ทธ๋ฆผ์ ์์์ ๋ค๋ฅผ ์๊ฐํ์ง๋ง ๊ทธ๋ฆผ (b)๋ ๋ค์์ ์์ ๊ณ ๋ คํ์๋ค. ์คํฐ์ปค์ ๋ณ์ ๊ณต์ ํ๋ ์คํฐ์ปค๋ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๊ฐ์ ์์ ์คํฐ์ปค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋๊ฐ์ ์คํฐ์ปค๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ ์คํธ ์ผ์ด์ค ์ ๋ ฅ
- n, ์คํฐ์ปค ์ ์ ์ ๋ ฅ
- dp : ์คํฐ์ปค ์ ์์ ํฉ ์ ์ฅ
- dp ๊ตฌํ ๊ฐ ์ค ์ต๋๊ฐ ์ถ๋ ฅ
์๊ฐ๐ค
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ์ค๋ ๊ฑธ๋ ธ๋ค.
์ฒ์ ์ฐพ์ ๊ท์น์ด ์กฐ๊ธ ์ด์ํ๋ค ํ๋๋ ๊ฒฐ๊ตญ... ํ๋ ธ์ง์ ~_~
์กฐ๊ธ๋ง ๋ ๋ค๋ฅด๊ฒ ์๊ฐํ์ผ๋ฉด... ๋ ๋ถ๋ฐํ์ ๐ฑ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1850_์ต๋๊ณต์ฝ์ (0) | 2022.03.17 |
---|---|
[Baekjoon] 2553_๋ง์ง๋ง ํฉํ ๋ฆฌ์ผ ์ (0) | 2022.03.16 |
[Baekjoon] 2644_์ด์๊ณ์ฐ (0) | 2022.03.14 |
[Baekjoon] 11725_ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ (0) | 2022.03.11 |
[Baekjoon] 2502_๋ก ๋จน๋ ํธ๋์ด (0) | 2022.03.10 |