본문 바로가기
알고리즘/BOJ

[BOJ] 2003번 수들의 합 2 / 사용언어 : 파이썬(python)

by 바른 호랑이 2022. 2. 16.
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

※ 관련개념

 

[Algorithm] 투포인터(Two Pointer) 알고리즘

알고리즘 문제를 풀다보면 종종 나오는 투포인터 알고리즘! 막 꼬여가지고 ㅋㅋㅋ 저도 중간에 제대로 못짜고 그러는 경우가 많은데요, 많은 코딩테스트 문제에 등장하는 것은 아니지만 잊을만

butter-shower.tistory.com

해당 문제는 투 포인터 알고리즘을 활용하면 해결할 수 있는 문제였다. 문제를 풀기전 해당 알고리즘의 원리를 파악하여

구현하기 위해 구글링을 통해 정보를 취득하였다. 간단하게 설명하면, 두개의 체크포인트를 이용하여 모든 경우의 수를

체크하는 방법으로 이해하면되겠다. 방법을 이해하고 나서는 풀이방법을 구현하는 것은 그리 어렵지 않았다.

자세한 풀이방법과 코드는 아래와 같다.

1. 입력받은 값들을 변수와 리스트에 저장해준다.

2. 포인터로 사용할 변수를 2개 선언해주고, while문을 사용하여 경우의 수를 탐색하며 조건 충족시 카운트해준다.

3. 반복문 종료 후 결과값을 출력해준다.

 

N, M = map(int, input().split())
numbers = list(map(int, input().split()))
cp1, cp2 = 0, 1 # cp1 < cp2
cnt = 0
while cp1 <= N:
    check = sum(numbers[cp1:cp2])
    if check <= M and cp2 < N:
        cp2 += 1
    else:
        cp1 += 1
    if check == M:
        cnt += 1
print(cnt)

 

P.S 더 나은 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글