풀이 소요시간 : 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();
}