https://www.acmicpc.net/problem/28422
코드
def xor_calculation(cards):
result = cards[0]
for i in range(1, len(cards)):
result ^= cards[i]
return bin(result).count("1")
n = int(input())
arr = [0]+list(map(int, input().split()))
if n == 1:
print(0)
else:
dp = [0]*(n+1)
if n >= 2:
dp[2] = xor_calculation(arr[1:3])
if n >= 3:
dp[3] = xor_calculation(arr[1:4])
if n >= 4:
dp[4] = dp[2] + xor_calculation(arr[3:5])
for i in range(5, n+1):
dp[i] = max(dp[i-2]+xor_calculation(arr[i-1:i+1]),
dp[i-3]+xor_calculation(arr[i-2:i+1]))
print(dp[n])
다이나믹 프로그래밍은 점화식이 쉬웠는데, 카드가 4장뿐일 때를 고려를 못 해서 시간이 좀 걸렸다...:(
'문제풀이 > DP' 카테고리의 다른 글
[Javascript/자바스크립트] (프로그래머스) 연속 펄스 부분 수열의 합 (0) | 2025.05.13 |
---|---|
[Javascript/자바스크립트] (프로그래머스) 땅따먹기 (1) | 2025.05.02 |
[Python/파이썬] 백준 16400번 소수 화폐 (0) | 2025.04.11 |
[Python/파이썬] 백준 14267번 회사 문화 1 (0) | 2025.03.26 |
[Python/파이썬] 백준 17208번 카우버거 알바생 (0) | 2025.03.10 |