ALGORITHM/프로그래머스 | 백준 | 삼성 | 카카오

[프로그래머스] 스타 수열 java

SZCODE 2021. 4. 5. 21:55

programmers.co.kr/learn/courses/30/lessons/70130

 

코딩테스트 연습 - 스타 수열

 

programmers.co.kr

/*
 * 
 * 조건 1 : 스타수열 길이 2이상
 * 조건 2 : 인접한 2개의 값씩 묶었을 때, 모든집합에서 교집합 원소 갯수 1개 이상
 * 조건 3 : 인접한 2개의 값씩 묶었을 때, 각 집합에 있는 2개의 값은 서로 다른 값 
 * 
 * */
class Solution {
    public static int solution(int[] a) {
        int answer = 0;
        int[] count = new int[a.length];//a 원소의 등장횟수
        for (int i = 0; i < a.length; i++) count[a[i]]++;

        for (int i = 0; i < count.length; i++) {//공통된 원소로 선택할 값
			if(count[i]==0) continue;//배열에 없으면 공통된 원소가 아님
			if(count[i]<=answer) continue;//가장 많이 사용된 횟수보다 작으면 긴 스타수열 만들수 x
			int tmp = 0;//해당 숫자가 사용된 횟수
			
			for (int j = 0; j < a.length-1; j++) {//배열 탐색 반복
                //인접한 2개의 값을 봤을 때 ,어느 하나라도 공통된 원소를 가지고 있어야한다.
				if(a[j] != i && a[j+1] !=i)continue;
                //인접한 2개의 값이 동일하지는 않은지 - 스타수열의 조건 3
				if(a[j] == a[j+1])continue;
				tmp++; j++;
			}
			answer = Math.max(answer, tmp);//현재까지 스타수열을 만드는데 가장 많이 사용된 횟수
		}
        
        return answer*2;//공통된 원소가 사용될 때마다, 인접한 값 하나씩을 더 가지고 있으므로
    }
}