본문 바로가기
study/CodingTest

최댓값의 인덱스 구하기

by 고기만두(개발자) 2022. 10. 2. 23:09
728x90
반응형

출처 ) 프로그래머스

 

문제 설명

주어진 입력중 최대값을 구하고, 최대값이 이 위치하는 index 값의 목록을 반환하세요.

입력:
[1, 3, 5, 4, 5, 2, 1]

입력된 목록의 최대값은 5입니다.
5와 동일한 값을 가진 위치는 3번째, 5번째 위치 입니다.
이 위치에 해당하는 index는 [2, 4] 입니다.

출력:
[2, 4]


입출력 예

입력: [1, 3, 5, 4, 5, 2, 1]
출력: [2, 4]
👉🏻 위와 같습니다.

입력: [3, 6, 10, 1, 7, 2, 4, 6, 10, 9]
출력: [2, 8]
👉🏻 최대값 10이 위치하는 곳은 3번째, 9번째 입니다. 이 위치의 index값은 2, 8입니다.

 

반응형

package programmers;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        int max = 0;
        int count = 0;
        int index = 0;

        //최댓값 구하기
        for(int a : arr){
            if (a > max){
                max = a;
            }
        }
        //최댓값 개수
        for(int a : arr){
            if(a == max){
                count++;
            }
        }

        //정답 배열에 인덱스 채우기
        answer = new int[count];
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == max){
                answer[index] = i;
                index++;
            }
        }

        return answer;
    }
}

advanced for문에서 a = arr의 해당 번지 값을 그대로 가져옴

생각할 수 있는 가장 순차적이고 현실적인 방법 중 하나.

package programmers;
import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer = {};
        int max = 0;
        int count = 0;
        List<Integer> list = new LinkedList<>();

        //최댓값 구하기
        for(int a : arr){
            if (a > max){
                max = a;
            }
        }
        //최댓값 개수
        for(int a : arr){
            if(a == max){
                count++;
            }
        }

        //정답 리스트에 인덱스 채우기
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == max){
                list.add(i);
            }
        }
        //리스트를 배열로 변환
        answer = new int[list.size()];
        for(int i = 0; i < answer.length; i++){
            answer[i] = list.get(i);
        }

        return answer;
    }

배열대신 linkedlist는 이렇게 활용하기

728x90
반응형

댓글