Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

운기의 블로그

백준 - 2003번 수들의 합 2 본문

알고리즘

백준 - 2003번 수들의 합 2

운띠야 2022. 6. 27. 18:16

접근방식

연속된 합을 구하기 위해 이중 포문을 사용하기로 결정했다.

이중 포문을 사용하기전에 N의 값이 10,000개라 시간초과에 대한 위험이 있을 수 있다고 생각했지만, 

적절하게 for문안에 break를 사용하면 시간초과는 나지 않을거라고 판단하고 진행했다. 

 

코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {

	int n;
	int m;
	int count = 0;

	cin >> n;
	cin >> m;

	vector<int> v;

	for (int i = 0; i < n; i++) {
		
		int x;
		cin >> x;

		v.push_back(x);
	}


	for (int i = 0; i < n-1; i++) {
		int x = v[i];
		if (x == m) {
			count++;
			continue;
		}

		for (int j = i+1; j < n; j++) {
			x = x + v[j];
			if (x == m) {
				count++;
				break;
			}

			if (x > m) {
				break;
			}
		}
	}


	int last = v.back();
	if (last == m) {
		count++;
	}

	cout << count;
	return 0;
}

 

풀이 방법

예시를 가지고 설명하자면,

 

4, 2

1, 1, 1, 1 

 

맨 처음 for문은 0부터 마지막 원소 전까지 

두번 째 for 문은 처음 for문의 +1 부터 시작해서 마지막 원소 까지로 잡았다. 

 

이렇게 되면 맨 마지막 값이 m의 값인 2와 같은지 확인하지 못하기 때문에 

이중 포문이 끝나면 마지막 원소값만  m과 같은지 확인하는 절차를 넣어주었다. 

 

이 방법 보다는 투 포인터 방법이 더 좋은거 같다.

'알고리즘' 카테고리의 다른 글

프로그래머스 - 메뉴 리뉴얼  (0) 2022.09.13
프로그래머스 - 신규 아이디 추천  (0) 2022.09.06
백준 - 2096 내려가기  (0) 2022.07.02
백준 - 2748번 피보나치 수 2  (0) 2022.07.01
백준 - 1806 부분합  (0) 2022.07.01