반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[프로그래머스/Java] 코딩테스트 Lv.0 최댓값 만들기(1) 본문

。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★/나의 코딩테스트

[프로그래머스/Java] 코딩테스트 Lv.0 최댓값 만들기(1)

yeonee 여니 2023. 10. 3. 01:16
728x90
반응형
SMALL

안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)

 

 

 

🪅 나의 문제 풀이

// 시도1
import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        
        // 오름차순 정렬
        Arrays.sort(numbers);
        
        int max = 0;
        int max2 = 0;
        
        for(int i = 0; i<numbers.length; i++){
                max = numbers[i];
        }
        
         for(int i = 0; i<numbers.length; i++){
            if(max != max2){
                max2 = numbers[i];
            }   
        }
        
        answer = max * max2;
        
        return answer;
    }
}
// 시도2
import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        
        // 오름차순 정렬
        Arrays.sort(numbers);
        
        int max = 0;
        int max2 = 0;
        
        for(int i = 0; i<numbers.length; i++){
            if(numbers[i] > max){
                max = numbers[i];
            }
        }
        
         for(int i = 0; i<numbers.length; i++){
            if(numbers[i] > max2 && numbers[i] != max){
                max2 = numbers[i];
            }   
        }
        
        answer = max * max2;
        
        return answer;
    }
}
// 시도3
import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        
        // 오름차순 정렬
        Arrays.sort(numbers);
        
        int max = 0;
        int max2 = 0;
        
        for(int i = 0; i<numbers.length; i++){
            if(numbers[i] > max){
                max = numbers[i];
            }
        }
        
         for(int i = 0; i<numbers.length; i++){
            if(numbers[i] > max2 && numbers[i] != max){
                max2 = numbers[i];
            }   
        }
        
        if(max != max2){
            
        }
        
        answer = max * max2;
        
        return answer;
    }
}

[테스트 통과]

import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;

        // 오름차순 정렬
        Arrays.sort(numbers);

        int max = 0;
        int max2 = 0;

        for(int i = 0; i<numbers.length; i++){
            if(numbers[i] > max){
                max = numbers[i];
            }
        }

         for(int i = 0; i<numbers.length; i++){
            if(numbers[i] > max2 && numbers[i] != max){
                max2 = numbers[i];
            }   
        }

        answer = numbers[numbers.length-1] * numbers[numbers.length-2];

        return answer;
    }
}

[해결 방안]

인덱스값으로 비교를 해야 하였기에 조건문을 수정 및 추가하였다.

테스트 4 실패 (0.54ms, 72.6MB)

테스트해보니 통과가 뜨길래 채점해보려는데 테스트 4번이 실패 ㅠㅠ
max와 max2  값이 같은 경우의 수도 존재하였다....
answer 도출하는 마지막 한 줄의 코드가 왜이리 떠올리기가 어려웠던가 ㅠㅠ
위의 코드 외에 다른 배열 최대값구하는 경우를 구글링하면서 열댓번 가량의 시도 후에 성공..!!

 

🧸 코드설명

배열에서 최댓값을 구하는 문제내용에서 바로 Arrays 클래스를 사용하여 오름차순 정렬하는 것을 알았다.
Arrays클래스를 import해주고, sort()메서드를 통해 오름차순으로 배열 numbers를 정렬 해주었다.
 

 

✨ 다른 풀이

풀이1)

신의 코드가 있었으니..!
for반복문 없이 바로 이렇게 접근하면 단 3줄로 코드가 완성된다니... 나도 더 발전해야겠다!!

최대값은 인덱스가 0부터 시작하기때문에 마지막 인덱스 번호는 '배열의 길이 -1' 해준 값이고,
두번째로 큰 값은 마지막 인덱스에서 -2번째 인덱스의 번호이므로 '배열의 길이 -2' 해준 값으로 계산합니다. 

변수로 만들어서 리턴값에 변수명을 넣어 푸는 경우도 있었다.

 

풀이2)

for문 안에 if조건문을 안정적으로 사용하는 방식!
int max는 현재까지 배열에서 발견된 최대값을 저장하는 변수입니다. 초기값은 배열의 첫 번째 요소인 numbers[0]로 설정합니다. max 변수를 numbers배열의 인덱스값과 비교하여 두 번째로 큰 값을 저장하는 변수 prev를 선언 및 0으로 초기화합니다. max값보다 현재 요소인 numbers[i]보다 크다면 prev변수에 이전 최대값인 max를 저장하고, max변수에 현재 요소numbers[i]를 저장합니다. 그렇지 않고(현재 요소인 numbers[i]가 max보다 크지않고) 현재 요소인 numbers[i]가 prev보다 크다면 prev에 현재 요소(두번째로 큰 값)인 numbers[i]을 저장합니다. prev와 max를 곱하여 결과값을 리턴합니다.

 

풀이3)

answer, max1. max2, num 변수를 생성 및 초기화 합니다.
첫번째  for문에서 배열 numbers를 반복문을 돌리면서 가장 큰 값을 찾습니다. 만약 현재 요소가 max1보다 크다면 max1을 현재 요소로 업데이트하고 해당 인덱스를 num에 저장합니다.
두번째 for문에서 배열 numbers를 반복문을 돌리면서 이전에 찾은 최대값인 max1의 인덱스 i와 num이 일치하지 않는 경우이고, 해당 값이 max2보다 크고 max1보다는 작거나 같으면 max2를 업데이트합니다.
인덱스값으로 비교하였기 때문에 max1과 max2의 값이 같을 경우도 구할 수 있습니다.
최종적으로 max1과 max2를 곱한 값을 answer에 담아, 이 값을 리턴합니다.

728x90
반응형
LIST