본문 바로가기
하루하루/프로그래머스 문제풀이

120899. 가장 큰 수 찾기

by 키튼햄 2023. 12. 2.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120899

 

 

 

 

풀이

처음에 생각했던 풀이 코드

import java.util.Arrays;

class Solution {
    public int[] solution(int[] array) {
        
        Arrays.sort(array);
        
        int[] answer = {array[array.length-1], array.length};
        return answer;
    }
}

 

처음에는 위와같이 생각했다. 그리고 테스트 돌려보고 잘못된거란걸 알았다..ㅋㅋㅋ

문제자체를 이해를 잘못했는데, 나는 가장 큰 숫자를 찾고, 그 배열의 길이를 구해서 배열에 차례로 넣으라는 건줄 알았는데, 아니었다...

가장 큰 숫자를 찾는건 맞는데 그 숫자가 있던 자리를 찾아야하는 것이었다. ㅋ

 

그래서 다시 생각을해보니 Arrays 메소드를 사용할 필요가 없을 것 같아 삭제하고 for문을 돌리기로 했다.

 

1. 먼저 for문을 돌리기 전에 최댓값을 담을 maxNum 변수와 그 수가 담긴 인덱스를 저장할 maxIdx를 선언한다.

  • (이때, maxNum 안에 Integer.MIN_VALUE를 넣은 이유는 =>  array 배열 안의 수가 0부터 시작된다는 사실을 알고는 있지만 변수 선언시 자바에서 표현 가능한 가장 작은 정수 값으로 초기화하는 역할을 내가 부여해주고 싶어서 그렇게 설정했다.(그냥.. 공부하고싶어서..) 사실상 int maxNum = 0; 으로 초기화선언해주어도 상관없다.)

2. for문을 이용해 array 배열을 차례로 돌려 배열안의 해당인덱스의 수가 maxNum보다 크면 다시 maxNum과 madIdx에 각각 해당자리의 수와 인덱스숫자를 넣는 방식으로 처리한다.

3. 그리고 answer 배열을 선언해 그 안에 maxNum과 maxIdx를 차례로 넣어준 후 반환한다.

 

 

코드

class Solution {
    public int[] solution(int[] array) {
        int maxNum = Integer.MIN_VALUE;
        int maxIdx = -1;

        for (int i = 0; i < array.length; i++) {
            if (array[i] > maxNum) {
                maxNum = array[i];
                maxIdx = i;
            }
        }

        int[] answer = {maxNum, maxIdx};
        return answer;
    }
}