[코딩테스트연습] 코딩테스트 입문 > Lv.0 최댓값 만들기(1)
2024. 3. 16. 11:42ㆍ코딩 테스트/[프로그래머스] Java
문제 설명
문제 풀이
두 개를 곱해서 최댓값을 만든다는 말은, 0이 아닌 두 최댓값을 곱하면 된다고 생각했다.
따라서 배열 중 1,2번째로 큰 값을 구해서 곱해주는 방법으로 작성하였다.
[try1]
import java.util.*;
import java.util.stream.*;
class Solution {
public int solution(int[] numbers) {
int answer = 0;
int max=0;
// 1번째로 큰 값 찾기
for(int i=0; i<numbers.length; i++){
if(numbers[i]>max) max=numbers[i];
}
answer += max;
List<Integer> list = Arrays.stream(numbers).boxed().collect(Collectors.toList());
numbers[list.indexOf(max)]=0;
// 2번째로 큰 값 찾기
max=0;
for(int i=0; i<numbers.length; i++){
if(numbers[i]>max) max=numbers[i];
}
answer *= max;
return answer;
}
}
1번째로 큰 값을 찾고난 후, 2번째로 큰 값을 찾기 위해서 어떻게 해야 하는지 고민했다.
1번째로 큰 값을 삭제한 후, 다시 최댓값을 찾는 과정을 거쳐야하나? 라고 생각했다.
하지만 그러기 위해서는 삭제될 큰 값의 인덱스로 접근해서 0으로 만들거나 아예 배열에서 삭제해야 했다.
위 원리를 이용해서 코드를 작성해보았는데... 굉장히 복잡해 보이는 것이다!
다른 방법이 있나 더 고민해보았다..가 방법이 떠올랐다!
배열을 정렬해서 두 개의 원소만 가져오면 되는 것이었다!!!!!!!!
[try2]
import java.util.*;
class Solution {
public int solution(int[] numbers) {
int answer = 0;
Arrays.sort(numbers); //오름차순 정렬
answer = numbers[numbers.length-1] * numbers[numbers.length-2];
return answer;
}
}
훨씬 간단하고 이해하기 좋은 코드로 작성했다!!
다른 사람의 풀이 보기
1. stream을 사용해서 내림차순 정렬 후, 곱셈 진행하기
2. prev라는 변수를 지정하여, 비교하면서 곱셉 진행하기
'코딩 테스트 > [프로그래머스] Java' 카테고리의 다른 글
[코딩테스트연습] 코딩테스트 입문 > Lv.0 평행 (0) | 2024.03.16 |
---|---|
[코딩테스트연습] 코딩테스트 입문 > Lv.0 문자열안에 문자열 (0) | 2024.03.16 |
[코딩테스트연습] 코딩테스트 입문 > Lv.0 특정 문자 제거하기 (0) | 2024.03.16 |
[코딩테스트연습] 코딩테스트 입문 > Lv.0 점의 위치 구하기 (0) | 2024.03.16 |
[Java] java.util.Arrays (0) | 2024.03.13 |