728x90
SMALL

/// 내가 작성한 코드

 

using System;
using System.Collections.Generic;
using System.Linq;

public class Solution {
    public int solution(int[] elements) {
        int[] doublearray = new int[2 * elements.Length];

/// 2배 길이의 배열을 작성해서 뒤에서 앞으로 합계를 구하는 경우가 가능하게 했다.
        HashSet<int> hash = new HashSet<int>(); // 중복 저장이 불가능한 HashSet을 썼다.
        
        for(int i = 0;i<2*elements.Length;i++)
        {
            doublearray[i] = elements[i%elements.Length];
        }

/// 2배 배열을 대입
        
        for(int i = 0;i<elements.Length;i++)
        {
            for(int j = 0;j<elements.Length;j++)
            {
                int[] newArray = doublearray.Skip(i).Take(j+1).ToArray();
                hash.Add(newArray.Sum());
            }
        }
        
        return hash.Count;
    }
}

 

 

 

// 되기는 되는데 시간이 엄청나게 오래 걸려서 겨우겨우 실행이 됐다. 그래서 다른 분 코드를 참조한 것을 했다.

// skip부터 시작해서 take에 있는 숫자 만큼 취한다.

// 

//

//

//

 

 

 

 

 

using System;

public class Solution {
    public int solution(int[] elements)
    {
        int answer = 0;
        int[] flagedInts = new int[elements.Length * 1000 + 1]; // 100만개까지 배열을 만든다. 길이가 1000이고, 배열에 들어가는 수가 1000까지니까 최대가 1000 * 1000 = 100만개까지 나온다. 전부 0이 들어가 있다.

        for(int addingLen = 1; addingLen <= elements.Length; addingLen++)
        {
            for (int i = 0; i < elements.Length; i++)
            {
                int idx = 0;
                for (int j = 0; j < addingLen; j++)
                {
                    idx += elements[(i + j) % (elements.Length)];
                }
                // 선택된 배열 인덱스만 1을 집어넣게 해서 if문으로 중복을 걸러내고 answer의 값을 플러스 시켜서 갯수를 구한다.
                if (flagedInts[idx] == 0)
                {
                    flagedInts[idx] = 1;
                    answer++;
                }
            }
        }

        return answer;
    }
}

 

 

// 이게 시간이 훨씬 덜 나온다.

 

 

자바

 

 

import java.util.*;
class Solution {
    public int solution(int[] elements) {
        Set<Integer> set = new HashSet<>();

        int start = 1;
        
        while(start < elements.length)
        {
            for (int i = 0; i < elements.length; i++)
            {
                int value = 0;
                for (int j = i; j < i+start; j++)
                {
                    value += elements[j%elements.length];
                }
                set.add(value);
            }
            start++;
        }

        int sum = 0;
        for (int i = 0; i < elements.length; i++)
            sum += elements[i];

        set.add(sum);

        return set.size();
    }
}

 

 

 

import java.util.*;

class Solution {
    public int solution(int[] elements) {
        int answer = 0;
        Set<Integer> set = new HashSet<>();
        int start = 0;

        for(int i=0; i<elements.length; i++) 
        {
            int n = 1;
            int idx = i;
            int sum = 0;
            while(n <= elements.length) 
            {
                sum += elements[idx++];
                set.add(sum);
                
                if(idx >= elements.length) 
                    idx = 0;
                n++;
            }
        }

        answer = set.size();

        return answer;
    }
}
728x90

설정

트랙백

댓글