[Programmers] 연속 부분 수열 합의 개수(Lv.2)

Alice·2023년 6월 18일
0

풀이 소요시간 : 15분

간단한 구현 문제다. 해시 가 사용되긴 하는데 문제 유형이라기엔 미약하다. 일전에 삼성 기출 문제를 풀면서 만들었던 Make_Range 함수의 형태는 여러가지 타입의 문제에서 요긴하게 사용되고있다.

int Make_Range(int num) {
    if(num >= N) {
        return num - N;
    }
    return num;
}

이런식으로 범위 초과 로 인한 좌표의 순환 이 발생하는 경우 굉장히 요긴하게 쓰이는 패턴이 되었다.


전체 코드

#include <string>
#include <vector>
#include <map>

using namespace std;
int N;
//index = [ 0, N-1 ]

int Make_Range(int num) {
    if(num >= N) {
        return num - N;
    }
    return num;
}

int solution(vector<int> elements) {
    
    N = elements.size();
    map<int, int> Map;
    
    //길이 1 인 수열 -> 길이 N 인 수열
    for(int i = 1; i <= N; i++)
    {
        // n 번째 원소부터 시작한
        for(int n = 0; n < N; n++) 
        {
            int Sum = 0;
            
            // i 개의 원소
            for(int k = 0; k < i; k++) 
            {
                int Index = Make_Range(n + k);
                Sum += elements[Index];
            }
            
            Map[Sum]++;
            
        }
    }
    
    return Map.size();
}
profile
SSAFY 11th

0개의 댓글