230217 TIL #11 HashSet을배열로

김춘복·2023년 2월 17일
0

TIL : Today I Learned

목록 보기
11/571

230217 Today I Learned

알고리즘테스트 3일차. 컬렉션프레임워크를 정리하고 남은시간에 코딩테스트를 풀었다.


HashSet을 배열로

  • 문제
    여기서 HashSet을 사용해서 쓰려니 배열로 바꾸는게 힘들었다.

  • 시도

  1. int[] answer = set1.toArray(new int[0]);
    set을 배열로 바로 변환이 안된다!!
    에러코드를 보니 int와 Interger차이때문에 안되는 것 같은데 이건 질문으로 물어보자.

  2. Iterator를 써서 배열에 for문으로 넣으니
    입력해야되는 값은 int인데 Iterator 값은 Object라 실패

나중에 다른 사람 답변을 보니 itor.next(); 앞에 (int)로 주면 된다.

while(itor.hasNext()){
            answer[index] = (int)itor.next();
            index++;
        }
  • 해결책
    결국 검색으로 방법을 찾아봤다.
    답은 중간에 ArrayList를 만들고 거기서 다시 배열로 옮기는 것.
        Set<Integer> set1 = new HashSet<Integer>();
        ArrayList<Integer> arrList = new ArrayList<Integer>();

        for (int i = 0; i < numbers.length; i++) {
            for (int j = i+1; j < numbers.length; j++) {
                set1.add(numbers[i] + numbers[j]);
            }
        }
        
        int[] answer = new int[set1.size()];

        for (int x : set1) {
            arrList.add(x);
        }
        Collections.sort(arrList);
        int count = 0;
        for (int y : arrList) {
            answer[count] = y;
            count++;
        }

        return answer;
  • 알게된 것
  1. HashSet을 ArrayList로 바꾸는 방법 : 향상된 for문 iter를 쓴다!
for (int x : set1) {
            arrList.add(x);
        }

이렇게하면 Iterator를 안써도 바로 들어간다.

  1. ArrayList를 배열로 : count를 만들고 향상된 for문을 쓴다!
int count = 0;
        for (int y : arrList) {
            answer[count] = y;
            count++;
        }
  1. 한 배열에서 다른 index끼리 더할때 j값 시작을 i+1로하면 같은값더하기 피할 수 있다.
    굳이 if (i==j){continue;}안써도 된다.
for (int i = 0; i < numbers.length; i++) {
            for (int j = i+1; j < numbers.length; j++) {
		set.add(answer[i]+answer[j];)
  1. 그리고 굳이 HaseSet안쓰고 TreeSet쓰면 알아서 sort까지 된다.

ChatGPT의 조언?

  • Hashset을 배열로 바꾸는 방법이 궁금해서 ChatGPT한테 물어봤더니
int[] answer = set1.stream().mapToInt(Integer::intValue).toArray();

한줄로 정리했다..
Interger를 Int로 바꿔주는 방법을 검색해보니 mapToInt가 나오는 걸로 봐서 이렇게 한 것 같은데 이거에 대해서는 좀 더 공부해보자.

알아둘 것

  • Iterator 개념

  • int와 Interger차이

profile
Backend Dev / Data Engineer

0개의 댓글