https://school.programmers.co.kr/learn/courses/30/lessons/131701
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 자체는 어렵지 않은데, 수열이라는 말에 깜빡하고 넘어가면 어려워지는 문제다.
나 혼자 풀다가 3중 이상 반복문을 사용하는 것에 어이가 없어서 답변을 보고 말았지.
이것같은 경우는
어차피 모든 수를 순차적으로 더해나간다를 기반한 것이다. s를 포인터라고 생각하고, 포인터를 한칸씩 앞으로 이동시키면서 모든 수를 더해나간다. 만약, 포인터의 위치가 전체 길이를 벗어나는 수가 될 경우 % 를 통해 ( 포인터가 6일 경우 % 5를 하면 결국 1이 되니까) 길이를 맞춰주는 방식이다.
나같은 경우는 계속 투포인터에 꽂히는 바람에 이렇게 쉬운 방법이 있다는 걸 잊고 있었다 ^^... 하나에 꽂히지 말자 효율적인 것이 결국 좋은 거다
public int t08(int[] elements) {
int answer = 0;
// 중복허용 안 되도록
HashSet<Integer> hs = new HashSet<>();
int s = 1;
while(s <= elements.length){
for(int i = 0; i < elements.length; i ++){
int sum = 0;
for(int j = i ; j < i + s ; j++){
sum += elements[j % elements.length];
}
hs.add(sum);
}
s++;
}
return hs.size();
}
'Algorithm' 카테고리의 다른 글
[018] 할인 행사 (0) | 2024.02.27 |
---|---|
[017] 괄호 회전하기 (0) | 2024.02.26 |
[015] 1918.후위 표기식 (0) | 2024.02.22 |
[014] 1931.회의실 배정 (0) | 2024.02.21 |
[013] 1181.단어 정렬 (0) | 2024.02.21 |