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();
    }
}

[접근법]

  1. 수열의 합을 담을 set 을 생성한다.
    • 이때, 중복 제거를 위해 Set을 사용한다.
  2. 수열의 합을 구하기 위해 이중 포문을 활용하고,
  3. 원형 구조를 반영하기 위해 (인덱스를 초과하는 수를 처리하기 위해) (i+j)%elements.length 를 활용한다.
    • 인덱스가 초과해도 elements.length 안에서 인덱스를 처리할 수 있다.
  4. 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

+ Recent posts