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
class Solution
{
public int solution(int n, int a, int b)
{
int cnt = 1;
while((a+1)/2 != (b+1)/2){
cnt++;
//라운드에서 만났을 때
if((a+1)/2 == (b+1)/2) break;
//안만났을 때
a = (a+1)/2;
b = (b+1)/2;
}
return cnt;
}
}
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
//중복되지 않은 단어 저장 할 리스트
ArrayList<String> wordlist = new ArrayList<>();
//처음 시작
wordlist.add(words[0]);
for(int i = 1; i < words.length; i++){
//중복 단어 찾기
if(wordlist.contains(words[i])) {
return new int[] {(i%n) + 1,(i/n) + 1};
}
else {wordlist.add(words[i]);}
//틀린 끝말잇기 찾기
if(words[i-1].charAt(words[i-1].length() - 1) != words[i].charAt(0)){
return new int[] {(i%n) + 1,(i/n) + 1};
}
}
//탈락자 생기지 않는 경우
return new int[] {0,0};
}
}
[접근법]
중복되지 않은 단어를 저장 할 리스트(wordlist) 생성 후, 맨 처음 단어를 저장한다.
import java.util.*;
public class Solution {
public int solution(int n) {
int ans = 0;
while(n > 0) {
if(n % 2 == 1){
ans++;
}
n = n/2;
}
return ans;
}
}