일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로그래머스
- CJ UNIT
- 시나공
- 데이터베이스
- 파이썬
- 백준알고리즘
- SQL
- 문제풀이
- 공부일지
- 정보처리산업기사
- BFS
- MYSQL
- 코딩봉사
- python
- C++
- softeer
- 회고
- kotlin
- 스프링
- 백준
- java
- SW봉사
- 1과목
- 알고리즘
- 백준 알고리즘
- 자바
- 코틀린
- 코딩교육봉사
- 소프티어
- programmers
- Today
- Total
JIE0025
[코딩테스트입문][lv.0] 최대값 만들기(1) - 자바(Java) 본문
프로그래머스 > 코딩테스트 연습 > 코딩테스트 입문 > 최대값 만들기(1)
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/120847
문제
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
- 0 ≤ numbers의 원소 ≤ 10,000
- 2 ≤ numbers의 길이 ≤ 100
배열을 정렬하는 방법을 기록하기 위해 이 문제를 들고 왔다.
앞으로 꼭 익숙하게 만들어야지!!
✅ 정답코드
import java.util.*;
class Solution {
public int solution(int[] numbers) {
//01) 오름차순 정렬후 마지막 & 마지막-1 인덱스 접근해 해결
Arrays.sort(numbers);
return numbers[numbers.length-1]* numbers[numbers.length-2];
}
}
import java.util.*;
class Solution {
public int solution(int[] numbers) {
//02) 역순정렬 후 0 & 1 인덱스 접근해 해결 하고 싶은데 그럴거면 wrapper클래스가 필요하고,
// 이걸 사용해서 굳이 Arrays.sort()할바엔 걍 아래 방식을 사용하겠움.
Integer[] tmp = Arrays.stream(numbers).boxed().toArray( Integer[]::new );
Arrays.sort(tmp, Collections.reverseOrder());
return tmp[0]* tmp[1];
}
}
import java.util.*;
class Solution {
public int solution(int[] numbers) {
//03) Stream을 이용한 정렬
numbers = Arrays.stream(numbers)
.boxed()
.sorted(Comparator.reverseOrder())
.mapToInt(Integer::intValue).toArray();
return numbers[0] * numbers[1];
}
}
import java.util.*;
class Solution {
public int solution(int[] numbers) {
//04) Collection인터페이스를 구현하는 친구들로 변환, Collections.sort()사용
//단 Wrapper 클래스 사용해야함
ArrayList<Integer> numArr = new ArrayList<>();
for(int num : numbers){
numArr.add(num);
}
Collections.sort(numArr);
return numArr.get(numArr.size()-1)* numArr.get(numArr.size()-2);
}
}
✅ 문제를 풀기 위해 새롭게 학습한 것
⏺ 배열을 정렬하는 방법
◾️ Arrays.sort()
import java.util.Arrays;
Arrays.sort()
String[] str = {"김례화","강지은","전진우","김민수","곽훈정"};
Arrays.sort(str);
Arrays.stream(str).forEach(i-> System.out.println(i));
- Primitive Type 배열의 정렬을 지원 (String도 예외적으로 가능함)
- 기본적으로 오름차순 정렬됨
- 숫자, 영문배열, 한글배열 모두 정렬 가능
✔️ 내림차순 정렬
내림차순을 위해선 Wrapper클래스를 사용해야한다.
( WHY? )
Collections의 도움을 받는데 컬렉션은 인터페이스라서 구현체에서 메서드를 사용할 수 있기 때문에 Primitive type에선 사용할 수 없다.
import java.util.Arrays;
import java.util.Collections;
// Wrapper 클래스를 활용하여 선언
Integer[] numbers = {5,2,8,10,6,9};
Arrays.sort(numbers, Collections.reverseOrder());
✔️ 배열의 일부분만 정렬
Array.sort(배열변수, 시작Index, 종료Index)
Array.sort(배열변수, 시작Index, 종료Index, Collections.reverseOrder());
◾️ Collections.sort()
컬렉션 타입의 정렬을 지원!
import java.util.Collections;
import java.util.ArrayList;
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(5); nums.add(2); nums.add(8);
nums.add(10); nums.add(6); nums.add(9);
Collections.sort(nums);
//Collections.sort(nums, Collections.reverseOrder());
⏺ stream.boxed()
stream 중간처리 메서드 중 boxed()라는 친구가 있다.
소속된 인터페이스에는 IntStream, LongStream, DoubleStream --에서 모두 제공되는데,
boxed()를 통해 int, long, double 요소를 Integer, Long, Double 요소로 박싱해서 Stream을 생성할 수 있다.
즉 boxed()를 사용하면 Stream<Integer>가 생성되는 것.
⛔️ 주의사항
IntStream과 Stream<Integer>은 다른 스트림이다.
IntStream : 기본 int 값의 스트림
Stream<Integer> : Integer의 스트림
성능에 대한 차이점
1) Integer는 참조에 대한 4byte, 개체에 대해 16byte로 총 20byte이고, int는 4byte이다.
2) Stream<Integer>가 메모리의 5배를 더 사용된다.
references
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[고득점kit][힙][lv.2] 더 맵게 - 자바(Java) (0) | 2022.11.30 |
---|---|
[고득점kit][해시][lv.2] 위장 - 자바(Java) (0) | 2022.11.29 |
[코딩테스트입문][lv.0] 문자열뒤집기 - 자바(Java) (0) | 2022.11.22 |
[프로그래머스][lv.1] 문자열 내 p와 y의 개수 - 자바(Java) (0) | 2022.11.02 |
[프로그래머스][lv.1] 평균구하기 - 자바(Java) (0) | 2022.11.01 |