728x90
[문제링크]
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.util.*;
class Solution {
public int solution(int[] elements) {
//중복 제거를 위해 set 사용
Set<Integer> set = new HashSet<>();
//원형구조 반영하여 수열의 합 구하기
for(int i = 0 ; i < elements.length ; i++){
int answer = 0;
for(int j = 0 ; j < elements.length ; j++){
answer += elements[(i+j)%elements.length];
set.add(answer);
}
//System.out.println(set);
}
return set.size();
}
}
[접근법]
- 수열의 합을 담을 set 을 생성한다.
- 이때, 중복 제거를 위해 Set을 사용한다.
- 수열의 합을 구하기 위해 이중 포문을 활용하고,
- 원형 구조를 반영하기 위해 (인덱스를 초과하는 수를 처리하기 위해) (i+j)%elements.length 를 활용한다.
- 인덱스가 초과해도 elements.length 안에서 인덱스를 처리할 수 있다.
- set에 수열의 합을 모두 저장하고 최종적으로 set의 크기를 반환한다.
Set이란?
Collection 인터페이스를 기반으로 구현한 클래스로 비선형 자료를 구현한 클래스이다.
📍Set의 특징
- 중복 값을 허용하지 ❌
- 저장된 순서를 유지하지 ❌
- 순서 유지⭕️ -> LinkedHashSet 클래스 이용
- 빠른 검색이 필요할 때 사용하는 클래스
📍Set 사용법
- 객체 생성
Set은 인터페이스 이므로 구현체인 HashSet을 통해 객체를 생성한다.
Set<String> set = new HashSet<String>(); //String 타입 / 타입 지정 ⭕️
Set<Integer> set = new HashSet<>(); //타입을 생략하여 사용 ⭕️ -> 빈 HashSet생성 시 사용
- 데이터 삽입 set.add()
Set<Integer> set = new Hashset<>();
set.add(1) //1 삽입
set.add(2) //2 삽입
System.out.println(set); //set 출력
결과 : [1, 2]
- 데이터 삭제 set.remove()
삭제 1처럼 작성 시, 원소를 삭제하고 set을 반환한다.
삭제 2처럼 작성 시, 원소를 삭제하고 true를 반환한다. 만약, 없는 원소라면 false를 반환한다.
//객체 생성
Set<Integer> set = new HashSet<>();
// 데이터 삽입
set.add(1);
set.add(2);
//데이터 삭제 1
set.remove(2);
System.out.println(set);
결과: [1]
//데이터 삭제 2
System.out.println(set.remove(4));
결과: false
//데이터 모두 삭제
set.clear();
- 특정 원소 존재 확인 set.contains()
존재 ⭕️ : true / 존재 ❌ : false
//객체 생성
Set<Integer> set = new HashSet<>();
//데이터 삽입
set.add(1);
set.add(2);
//원소 존재 확인
System.out.println(set.contains(3));
결과: fasle //존재 ❌
- set 빈 상태인지 확인 set.isEmpty()
비었으면 true / 원소 존재하면 false 반환
//객체 생성
Set<Integer> set = new HashSet<>();
//데이터 삽입
set.add(1);
set.add(2);
//set 비었는지 확인
System.out.println(set.isEmpty());
결과: false //[1,2]로 원소 존재
- set의 크기 확인 set.size()
set의 크기를 반환한다.
//객체 생성
Set<Integer> set = new HashSet<>();
//데이터 삽입
set.add(1);
set.add(2);
//set 크기 확인
System.out.println(set.size());
결과: 2
처음에 (i+j)%elements.length를 생각하기 전까지 꽤 많이 애를 먹었다.
이를 통해 원형 구조, 반복 수열 등을 많이 안다뤄본 것이 티가 난다고 생각했고,
문제해결력을 더 키우고 다양한 문제를 접해야겠다고 생각했다.
728x90
'💻코딩 > 💡Programmers' 카테고리의 다른 글
[프래그래머스|JAVA] 예상 대진표 (1) | 2025.04.23 |
---|---|
[프로그래머스|JAVA] 영어 끝말잇기 (1) | 2025.04.18 |
[프로그래머스|JAVA] N개의 최소공배수 | gcd(), lcm() (1) | 2025.04.16 |
[프로그래머스|JAVA] 멀리 뛰기 | 동적 계획법 (DP: Dynamic Programming) (1) | 2025.04.08 |
[프로그래머스|JAVA] 귤 고르기 | int[] -> ArrayList<Integer> (0) | 2025.04.05 |