문제 설명
https://softeer.ai/practice/7353
(저작권으로 인해 링크로 대체합니다!)
주의 사항
두 수를 곱해서 최대 값을 구하는 것이기 때문에 음수*음수의 경우에 주의!!!
ex) 땅의 비옥함이 -1, 2, 3, -10 와 같다면 음수*음수의 경우(-1*-10)가 최대값이기 때문에 해당 경우를 주의 해야한다.
문제 풀이
제일 먼저 알고리즘 정렬 방식에서 떠올라 비옥함을 각 배열에 담고 서로서로 비교하여 최대값을 비교하면 되지 않을까??
라는 생각을 가지고 코드를 작성하였다.
1. arr배열을 선언하여 땅의 비옥함을 배열에 담는다.
2. 비옥함을 담아둔 배열의 첫번째 값을 max값으로 초기선언 한다.
( max값을 0으로 초기 선언을 하게 되면 추후 max값을 비교할 때 초기 값이 음수라면 0보다 작기 때문에 max값을 0으로 담기 때문 )
3. 2중 for문을 선언하는데 위의 그림과 같이 계산 하려면 두번째 for문 실행 시 계산한 배열 index는 제외 시켜주어야 한다.
코드 풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //사용자가 입력한 값 받아오기
int n = sc.nextInt(); //나무를 심어야하는 위치 개수
int[] arr = new int[n];
//arr배열을 선언하여 차례로 비옥함을 담는다
for(int i=0; i<n; i++){
arr[i] = sc.nextInt();
}
//음수인 값을 대비하여 0으로 선언하지 않고 max값을 처음 배열 곱한 값으로 선언
int max = arr[0]*arr[1];
for(int j=0; j<arr.length-1; j++){
for(int k=1; k<arr.length; k++){
//앞서 계산한 배열 index는 제외 시킨다
if(j != k){
if(max < arr[j]*arr[k]){ //곱한 값이 기존에 저장한 max값 보다 크다면 해당 값을 max값을 변경
max = arr[j]*arr[k];
}
}
}
}
System.out.println(max); //최대값 출력
}
}
단순하게 이중 for문으로 구현을 했는데 다른 사람들의 풀이를 찾아보니 비옥함에 대한 배열을 선언 후 해당 배열을 sort()한 후 맨 앞 두 배열 값과 맨 뒤 두 배열 값을 비교하여 max값을 찾는 풀이가 있어 같이 정리 해본다!
생각해보니 정말 간단한 방법이쟈나..??
해당 해결 방법으로 정렬하게 되면 음수는 절대값이 큰 숫자 일수록 작은 수가 되기 때문에 앞의 두 개의 값이 음수 중에서 제일 큰 값이 될 것이고,
양수는 절대값이 큰 숫자일수록 큰 수가 되기 때문에 뒤의 두 개의 값이 양수 중에서 제일 큰 값이 될 것이다. 코드도 해당 방식으로 변경하면 정말 간단하게 풀이가 될 것 같아 해당 방식으로 코드를 수정해 보았다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
int max = 0;
for(int i=0; i<n; i++){
arr[i] = sc.nextInt();
}
//비옥함을 담은 배열 sort()로 정렬
Arrays.sort(arr);
//Math.max()로 큰 값 비교
max = Math.max(arr[0]*arr[1],arr[n-1]*arr[n-2]);
System.out.println(max);
}
}
너무 간단하게 끝나 버렸잖아...???? 소스가 너무 깔끔하게 정리 되었다....ㅎㅎㅎ혼자 어렵게 풀었군🤪
얼른 다른 문제도 많이 풀어서 이렇게 뚝딱 뚝딱 풀 수 있도록 연습 많이 해야지..!!!
실행 결과
'개발일지 > 코테 정복기' 카테고리의 다른 글
[Softeer/JAVA] 근무시간(LV.1) (0) | 2024.06.07 |
---|---|
[Softeer/JAVA] 주행거리 비교하기(LV.1) (0) | 2024.06.07 |
[프로그래머스/JAVA] 문자열 섞기 (0) | 2024.03.29 |
[프로그래머스/JAVA] 문자열 겹쳐쓰기 (0) | 2024.03.23 |
[프로그래머스/SQL] 조건에 부합하는 중고거래 상태 조회하기(Oracle) (0) | 2023.08.08 |