Skip to content

Commit b5b315b

Browse files
authored
Merge pull request #202 from AlgorithmStudy-Allumbus/YoonYn9915
YoonYn9915/ 4μ›” 4μ£Όμ°¨/ 3문제
2 parents db3a96b + c99671d commit b5b315b

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import sys
2+
3+
N = int(sys.stdin.readline())
4+
arr = sorted(map(int, sys.stdin.readline().split()))
5+
6+
left = 0
7+
right = N - 1
8+
9+
answer = (arr[left], arr[right], abs(arr[left] + arr[right]))
10+
11+
# 투 포인터 μ‚¬μš©ν•΄μ„œ μ ˆλŒ€κ°’μ΄ 0에 κ°€μž₯ κ°€κΉŒμš΄ 두 κ°’ μ°ΎκΈ°
12+
while left < right:
13+
total = arr[left] + arr[right]
14+
abs_total = abs(total)
15+
16+
if abs_total < answer[2]:
17+
answer = (arr[left], arr[right], abs_total)
18+
if abs_total == 0:
19+
break
20+
# 두 μš©μ•‘μ˜ 값이 0보닀 크면 rightλ₯Ό μ€„μ—¬μ„œ 합을 μž‘κ²Œ λ§Œλ“ λ‹€
21+
if total > 0:
22+
right -= 1
23+
else:
24+
# 두 μš©μ•‘μ˜ 값이 0보닀 μž‘μœΌλ©΄ leftλ₯Ό λŠ˜λ €μ„œ 합을 크게 λ§Œλ“ λ‹€
25+
left += 1
26+
27+
print(f"{answer[0]} {answer[1]}")
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import sys
2+
3+
inp = sys.stdin.readline
4+
5+
N = int(inp())
6+
arr = list(map(int, inp().split()))
7+
arr.sort()
8+
9+
min_value = int(1e10)
10+
answer = [-1, -1, -1]
11+
12+
# 각 μš©μ•‘μ„ μˆœνšŒν•˜λ©°
13+
for i in range(N):
14+
left = i + 1
15+
right = N - 1
16+
17+
# i번 μš©μ•‘μ„ λ„£μ—ˆμ„ λ•Œ 값이 κ°€μž₯ 0에 κ°€κΉŒμš΄ 두 κ°’ μ°ΎκΈ°
18+
while left < right:
19+
if left == i:
20+
left = i + 1
21+
continue
22+
elif right == i:
23+
right = i - 1
24+
continue
25+
26+
total = arr[i] + arr[left] + arr[right]
27+
28+
# μ„Έ μš©μ•‘μ˜ 합이 0에 κ°€μž₯ κ°€κΉŒμš°λ©΄ μ—…λ°μ΄νŠΈ
29+
if abs(total) < min_value:
30+
min_value = abs(total)
31+
answer = [arr[i], arr[left], arr[right]]
32+
33+
if total == 0:
34+
break
35+
elif total < 0:
36+
left += 1
37+
else:
38+
right -= 1
39+
40+
answer.sort()
41+
42+
for ans in answer:
43+
print(ans, end=" ")
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from sys import stdin
2+
3+
T, W = map(int, stdin.readline().split())
4+
5+
6+
lst = [0]
7+
dp = [[0]*(W+1) for _ in range(T+1)]
8+
9+
# μž…λ ₯ λ°›κΈ°
10+
for _ in range(T):
11+
lst.append(int(stdin.readline()))
12+
13+
# DP ν…Œμ΄λΈ” μ±„μš°κΈ°
14+
for i in range(1, T+1):
15+
if lst[i] == 1:
16+
# 이동을 ν•œ λ²ˆλ„ μ•ˆ ν–ˆμ„ 경우 (항상 1번 λ‚˜λ¬΄ μ•„λž˜ 있음)
17+
dp[i][0] = dp[i-1][0] + 1 # μžλ‘ 먹으면 +1
18+
else:
19+
# 1번 λ‚˜λ¬΄ μ•„λž˜ μžˆλŠ”λ° 2번 λ‚˜λ¬΄μ—μ„œ μžλ‘ λ–¨μ–΄μ§€λ©΄ λͺ» 먹음
20+
dp[i][0] = dp[i-1][0]
21+
22+
# 이동 횟수 1회 이상뢀터
23+
for j in range(1, W+1):
24+
if lst[i] == 2 and j % 2 == 1:
25+
# ν™€μˆ˜λ²ˆ μ΄λ™ν–ˆμ„ λ•ŒλŠ” 2번 λ‚˜λ¬΄ μ•„λž˜ 있음 β†’ 2번 λ‚˜λ¬΄μ—μ„œ μžλ‘ λ–¨μ–΄μ§€λ©΄ +1
26+
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + 1
27+
elif lst[i] == 1 and j % 2 == 0:
28+
# 짝수번 μ΄λ™ν–ˆμ„ λ•ŒλŠ” 1번 λ‚˜λ¬΄ μ•„λž˜ 있음 β†’ 1번 λ‚˜λ¬΄μ—μ„œ μžλ‘ λ–¨μ–΄μ§€λ©΄ +1
29+
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + 1
30+
else:
31+
# μžλ‘ λͺ» 먹을 경우, μ΄λ™ν•˜κ±°λ‚˜ 이동 μ•ˆ ν•˜κ±°λ‚˜ λ‘˜ 쀑 μ΅œλŒ€κ°’λ§Œ κ°€μ Έμ˜€κΈ°
32+
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j])
33+
34+
print(max(dp[-1]))

0 commit comments

Comments
Β (0)