알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄
https://school.programmers.co.kr/learn/courses/30/lessons/178870
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Think🤔
문제가 나와있는대로 먼저 작성
7,9,1,1,4
길이가 1인 것
1,1,4,7,9 -> 중복제거 1,4,7,9
길이가 2인 것
[1,1][1,4][4,7][7,9][9,1] -> 중복제거 -> 2,5,11,16,10
길이가 3인 것
[7,9,1][9,1,1][1,1,4][1,4,7][4,7,9] -> 중복제거 -> 17,11,6,12,20
... 반복
규칙이 이런식으로 반복됨
중복을 제거하고 (Set 이용)
원형수열의 특징 2배를 만들어서 포인터 이동시키면서 각 수열의 합을 구함
1,2,3,4,5,1,2,3,4,5
1,2,3,4,5,1,2,3,4,5
1,2,3,4,5,1,2,3,4,5
1,2,3,4,5,1,2,3,4,5
1,2,3,4,5,1,2,3,4,5
...
이런식으로 반복 시켜서 확인
Solution✍
import java.util.Set;
import java.util.HashSet;
class Solution {
public int solution(int[] elements) {
int answer = 0;
int[] cirele = new int[elements.length * 2];
//01234
//56789
for(int i=0; i<elements.length; i++){
cirele[i] = elements[i];
cirele[i + elements.length] = elements[i];
}
// 원순열 특징이용해서 자리값 맨처음으로 돌리면서
// 각 자리값 합으로 만들 수 있는 경우의 수 구함
// 7 9 1 1 4 들어올 시
// 7이 맨앞이면서 9114 더해준값
// 9맨 앞 더 해준 값 해서 4까지
Set<Integer>set = new HashSet();
for(int i=0; i<elements.length; i++){
int sum = 0;
for(int j=i; j<elements.length + i; j++){
sum += cirele[j];
set.add(sum);
}
}
return set.size(); // 중복없는 총 사이즈 값
}
}
Review🤩
중복수열 풀이에 대해 알아보았다.
처음에는 중복수열 자체도 몰라서 해당 알고리즘 관련 다른 글들을 많이 참조했음
'Algorithm' 카테고리의 다른 글
[프로그래머스] 할인 행사 (0) | 2024.06.18 |
---|---|
[프로그래머스] 괄호 회전하기 (0) | 2024.05.01 |
[프로그래머스] 멀리 뛰기 , 귤 고르기 (0) | 2024.04.23 |
[프로그래머스] N개의 최소공배수 (1) | 2024.04.17 |
[프로그래머스] [1차] 뉴스 클러스터링 (0) | 2024.04.09 |