일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 백준
- BinaryGap
- 1793번
- python
- programmers
- 1759번
- 2163번
- github
- codility
- caniuse
- 9251번
- Java
- 2630번
- WebSecurityConfigurerAdapter
- 1992번
- Spring Security
- 입이 트이는 영어
- 신규아이디추천
- 분할정복
- 권주현의 진짜 영국 영어
- EBS어학당
- 파이썬
- SecurityFilterChain
- 영어
- 알고리즘
- 11727번
- 프로그래머스
- 11047번
- 18406번
- 1057번
Archives
- Today
- Total
철갑이의 이모저모
[백준] 2003번(수들의 합 2) with Python 본문
728x90
문제
2003번: 수들의 합 2
첫째 줄에 N(1≤N≤10,000), M(1≤M≤300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
www.acmicpc.net
풀이
시간초과가 나서 투포인터를 공부해 문제를 풀어보았다.
합이 M보다 작은 경우 end 1 증가 시키고, M과 같으면 카운트, M보다 커지면 start 값을 1 증가시킨다. (반복)
답
N, M = map(int, input().split(' '))
A = list(map(int, input().split(' ')))
cnt = 0
x = 0
end = 0
for start in range(N) :
while x < M and end < N :
x += A[end]
end += 1
if x == M :
cnt += 1
x -= A[start]
print(cnt)
N, M = map(int, input().split(' '))
A = list(map(int, input().split(' ')))
cnt = 0
j = 1
for i in range(N) :
if A[i] == M :
cnt += 1
elif A[i] < M and j > i :
x = A[i]
for j in range(1,N) :
x += A[j]
if x == M :
cnt += 1
else :
pass
print(cnt)
시간초과가 나왔던 코드
728x90
'알고리즘' 카테고리의 다른 글
[백준] 1793번(타일링) with Python (0) | 2020.10.08 |
---|---|
[백준] 11727번(2xn 타일링 2) with Python (0) | 2020.10.07 |
[백준] 18406번(럭키 스트레이트) with Python (0) | 2020.10.02 |
[백준] 1057번(토너먼트) with Java (0) | 2020.09.27 |
[백준] 8958번(OX퀴즈) with Java (0) | 2020.09.27 |