[구름톤 챌린지] 1주차 학습 일기 (2)

밤새·2023년 8월 22일
0

구름톤 챌린지

목록 보기
2/4
post-thumbnail

구름IDE 문제 문제 4~5

배운점 ✨

1) ArrayList() 메소드

이번에 arraylist 메소드에 대해 자세히 알게 되었다.

참고) ArrayList는 인덱스 기반의 데이터를 관리하고 있으며, 순서가 존재한다. 동적으로 크기가 변경될 수 있기 때문에데이터를 나누고, 정렬하고 합치는 문제에서는 적합한 자료형이다.

ArrayList는 아래처럼 선언할 수 있고, 다음과 같은 메소드를 제공하고 있다.

ArrayList<Integer> list = new ArrayList<Integer>();
  • add(E e) : 리스트의 마지막에 원소를 추가
  • add(int index, E element) : 지정한 인덱스에 원소를 추가
  • remove(int index) : 지정한 인덱스의 원소를 삭제
  • get(int index) : 지정한 인덱스의 원소를 반환
  • set(int index, E element): 지정한 인덱스의 원소를 새 원소로 대체
  • size(): 리스트의 크기(원소의 수)를 반환
  • Collections.max(arr) : arr 배열 중에서 가장 큰 값을 반환
  • arr.indexOf(target) : arr 배열 중에서 target의 위치를 반환
  • Array.copyOfRange(array, start, end) : arr 배열을 arr[A]부터 arr[B] 전까지 분리
  • Collections.reverseOrder(arr) : arr 배열을 내림차순해서 반환
  • addAll : 새로운 리스트 합치기

+ arraylilst와 split()함수 활용

// 배열 입력 받기
String[] arrStr = sc.nextLine().split(" ");
//ArrayList 선언하기
ArrayList<Integer> arr = new ArrayList<>();
for (String s : arrStr) {
arr.add(Integer.parseInt(s));
}

2) Stream API를 활용하여 모든 요소 합하기

ArrayList의 모든 요소를 합하는 방법에는 반복문을 활용하거나, Java8 이상에서 Stream API 를 활용하는 방법이 있다고 하는데 Stream API 를 활용하는 방법에 대해 처음 알게 되었다!

  1. 반복문 활용 (for-each Loop)

    ArrayList의 모든 요소를 순회하면서 각 요소를 더함.

    int sum = 0;
            for (int num : list) {
                sum += num;
            }
    
  2. Stream API 활용

    ArrayList를 스트림으로 변환하고, mapToInt 메소드로 각 요소를 Integer에서 기본형 int로 변환한 다음, sum 메소드로 모든 요소를 더함.

    int sum = list.stream().mapToInt(Integer::intValue).sum();
    
    
  3. reduce() 활용
    검색을 해보았는데 reduce()함수를 이용하여 모든 요소를 합할 수 있다고 한다.

    int sum = list.stream().reduce(0, Integer::sum);

3) 2진수로 변환하기

나는 2진수로 변환하는 방법을 총 2가지를 알고 있었는데

  • Integer.toBinaryString(int n)
  • Integer.toString(int n, 2)

이번에 Integer.bitCount(int n) 함수를 알게 되었다.

4) Pair Class

이번에 pair라는 개념을 새로 알게 되었다.

자바에서 Pair는 두 개의 값을 저장하는 데 사용되는 클래스이다.
즉, 두 개의 값을 하나의 단위로 묶어서 사용할 수 있도록 도와준다.

ArrayList<Pair>는 자바에서 Pair 객체들을 저장하는 동적 배열을 선언할 수 있다. Pair 각각 요소에 접근하기 위해서는 getLeft()getRight() 를 사용해서 접근할 수 있다.

예시 코드

Pair<String, Integer> pair = Pair.of("John", 25);
String name = pair.getLeft();
Integer age = pair.getRight();

Pair 의 개념을 사용해서 한 데이터의 객체를 아래와 같이 묶어줄 수 있다.

pairs.add(new Pair(name, age));

Pair에 더 자세히 알고 싶다면?
[Java] 2개의 값을 리턴할 때는? Pair class 사용하기 읽어보기!

2) Comparable 인터페이스

  • Comparable 인터페이스를 구현하는 것은 클래스가 비교 가능하다는 것을 의미한다. 즉, Pair 객체들을 비교할 수 있도록 하기 위해 사용된다.
  • Comparable 인터페이스는 compareTo() 메소드를 정의하도록 강제하며, 이 메소드를 통해 객체 간의 비교 기준을 정의할 수 있다.

Pair 라는 자료형에 정렬 속성을 부여한다고 생각하면 개념적으로는 간단하다.
실제로 코드 역시 어떤 클래스에 새로운 메소드를 추가하는 것과 비슷하다.

  1. Comparable 인터페이스를 구현을 만들어 주고, Pair를 선언할 때 입력 받은 값을 Comparable 속성에 할당한다.
  2. 그후 또 다른 Pair o 와 비교한다. compareTo 는 비교 함수이다. true와 false를 반환하며 True때는 Pair o 보다 기존의 Pair 크다는 뜻이고, false를 반환하면 작다는 뜻이다.

느낀점 ✍🏻

문제를 다 풀고 테스트를 했을 때 다 맞았었는데 제출을 하고 보니 테스트 케이스에서 몇개 실패한게 있었다. 이리저리 고쳐봤지만 원인을 몰라서 참 답답했다. 😭
문제 해설 보면서 무엇이 잘못되어있는지 찾고, 나중에 다시 풀어봐야겠다!!

어려웠던 점 🤔

이진수 정렬 문제를 풀 때 PriorityQueue를 사용하여 풀어보았는데 처음 써본 함수여서 생각보다 어려웠다.

구름톤 챌린지가 뭔지 궁금하다면?
https://9oormthonchallenge.oopy.io/
학습 일기 작성법이 궁금하다면 ?
https://9oormthonchallenge.oopy.io/blogeventguide

profile
프로젝트를 통해 배운 개념이나 겪은 문제점들을 정리하고, 회고록을 작성하며 성장해나가는 곳입니다 😊

0개의 댓글