[파이썬] 백준 5624 : 좋은 수 (골드 3)
5624번: 좋은 수
정수 N개로 이루어진 수열 A가 있다. 이때, i번째 수가 그 앞에 있는 수 세 개의 합으로 나타낼 수 있을 때, 그 수를 좋다고 한다. (같은 위치에 있는 수를 여러 번 더해도 된다) 수열이 주어졌을 때
www.acmicpc.net
문제
풀이
방향성 생각
- 입력이 5000이라 N^2까지 가능
- 처음 풀이는 순회 하면서 모든 조합을 저장해서 조회하는 식으로 했는데 시간 초과
- 현재 숫자 a에서 이전에 arr에서 등장했던 숫자 o를 빼면 a-o가 나온다.
- 이 a-o가 이전에 두 숫자의 조합으로 만들 수 있으면 그 숫자을 카운팅
- 경우의 수가 아니라, 각 위치에 있는 숫자가 좋은 수인지만 판별하면 된다.
전체코드
n = int(input())
arr = list(map(int,input().split()))
one,two = set(),set()
dp = [False]*n
for i in range(n):
a = arr[i]
for o in one:
if a-o in two:
dp[i] = True
one.add(a)
for o in one:
two.add(a+o)
print(sum(dp))
코멘트
.
'Algorithm > Dynamic Programming' 카테고리의 다른 글
[파이썬] 백준 2253 : 점프 (골드4) (0) | 2024.02.07 |
---|---|
[파이썬] 백준 10217 : KCM Travel (플레5) (0) | 2023.12.25 |
[파이썬] 백준 1102 : 발전소 (플레5) (0) | 2023.12.22 |
[파이썬] 백준 4781 : 사탕가게 (골드4) (0) | 2023.12.05 |
[파이썬] 프로그래머스 : 도둑질 (Lv.4) (0) | 2023.11.23 |
[파이썬] 프로그래머스 : 스티커 모으기 2 (Lv.3) (0) | 2023.11.23 |
[파이썬] 백준 10844 : 쉬운 계단 수 (실버1) (0) | 2023.11.23 |
댓글