구름IDE 문제 문제 4~5
이번에 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
: 새로운 리스트 합치기// 배열 입력 받기
String[] arrStr = sc.nextLine().split(" ");
//ArrayList 선언하기
ArrayList<Integer> arr = new ArrayList<>();
for (String s : arrStr) {
arr.add(Integer.parseInt(s));
}
ArrayList
의 모든 요소를 합하는 방법에는 반복문을 활용하거나, Java8 이상에서 Stream API
를 활용하는 방법이 있다고 하는데 Stream API
를 활용하는 방법에 대해 처음 알게 되었다!
반복문 활용 (for-each Loop
)
ArrayList의 모든 요소를 순회하면서 각 요소를 더함.
int sum = 0;
for (int num : list) {
sum += num;
}
Stream API
활용
ArrayList를 스트림으로 변환하고, mapToInt
메소드로 각 요소를 Integer
에서 기본형 int
로 변환한 다음, sum
메소드로 모든 요소를 더함.
int sum = list.stream().mapToInt(Integer::intValue).sum();
reduce()
활용
검색을 해보았는데 reduce()함수를 이용하여 모든 요소를 합할 수 있다고 한다.
int sum = list.stream().reduce(0, Integer::sum);
나는 2진수로 변환하는 방법을 총 2가지를 알고 있었는데
Integer.toBinaryString(int n)
Integer.toString(int n, 2)
이번에 Integer.bitCount(int n)
함수를 알게 되었다.
이번에 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 사용하기 읽어보기!
Comparable
인터페이스를 구현하는 것은 클래스가 비교 가능하다는 것을 의미한다. 즉, Pair
객체들을 비교할 수 있도록 하기 위해 사용된다.Comparable
인터페이스는 compareTo()
메소드를 정의하도록 강제하며, 이 메소드를 통해 객체 간의 비교 기준을 정의할 수 있다.Pair
라는 자료형에 정렬 속성을 부여한다고 생각하면 개념적으로는 간단하다.
실제로 코드 역시 어떤 클래스에 새로운 메소드를 추가하는 것과 비슷하다.
Comparable
인터페이스를 구현을 만들어 주고,Pair
를 선언할 때 입력 받은 값을Comparable
속성에 할당한다.- 그후 또 다른
Pair o
와 비교한다.compareTo
는 비교 함수이다. true와 false를 반환하며 True때는Pair o
보다 기존의Pair
크다는 뜻이고, false를 반환하면 작다는 뜻이다.
문제를 다 풀고 테스트를 했을 때 다 맞았었는데 제출을 하고 보니 테스트 케이스에서 몇개 실패한게 있었다. 이리저리 고쳐봤지만 원인을 몰라서 참 답답했다. 😭
문제 해설 보면서 무엇이 잘못되어있는지 찾고, 나중에 다시 풀어봐야겠다!!
이진수 정렬 문제를 풀 때 PriorityQueue
를 사용하여 풀어보았는데 처음 써본 함수여서 생각보다 어려웠다.
구름톤 챌린지가 뭔지 궁금하다면?
https://9oormthonchallenge.oopy.io/
학습 일기 작성법이 궁금하다면 ?
https://9oormthonchallenge.oopy.io/blogeventguide