자바 자료구조#03. List 연습문제_최대값 인덱스 구하기

A Kind Dev·2022년 8월 10일
0

자바 자료구조

목록 보기
5/20

문제

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

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

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

출력:
[2, 4]


나의 풀이

class Solution {
    public int[] solution(int[] arr) {
        
        // 1. 최대값 구하기
        int max = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        
        // 2. 최대값의 갯수 구하기
        int n = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == max) {
                n++;
            }
        }
        
        // 3. 최대값의 위치로 배열 선언
        int idx = 0;
        int[] answer = new int [n];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == max) {
                answer[idx] = i;
                idx++;
            }
        }
        
        return answer;
    }
}

강의 풀이

1) 배열 사용

class Solution {
    public int[] solution(int[] arr) {
        
        // 1. 최대값 구하기
        int max = 0;
        for(int a : arr) if(a > max) max = a;
        
        // 2. 최대값이 몇 개인지 확인하기
        int count = 0;
        for(int a : arr) if(a == max) count++;
        
        // 3. 배열 만들기
        int[] answer = new int [count];
        
        // 4. 배열에 인덱스 채우기
        int index = 0;
        for(int i = 0; i < arr.length; i++) {
        	if(arr[i] == max) answer[index++] = i;
        }
        
        return answer;
    }
}

2) LinkedList 사용

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        
        // 1. 최대값 구하기
        int max = 0;
        for(int a : arr) if(a > max) max = a;
        
        // 2. 리스트 만들기
        List<Integer> list = new LinkedList<>();
       
        // 3. 배열에 인덱스 채우기
        for(int i = 0; i < arr.length; i++) {
        	if(arr[i] == max) list.add(i);
        }
        
        // 4. 리스트를 배열로 변환
        int[] answer = new int[list.size()];
        for (int i = 0; i < answer.size(); i++) {
        	answer[i] = list.get(i);
        }
        
        return answer;
    }
}

3) Stream 사용하여 List to Array 변환

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        
        // 1. 최대값 구하기
        int max = 0;
        for(int a : arr) if(a > max) max = a;
        
        // 2. 리스트 만들기
        List<Integer> list = new LinkedList<>();
        for(int i = 0; i < arr.length; i++) {
        	if(arr[i] == max) list.add(i);
        }
        
        // 3. 리스트를 배열로 변환
        int[] answer = list.stream().mapToInt(Integer::intValue).toArray();
        
        return answer;
    }
}

4) Stream 사용하여 max 값 구하기

import java.util.*;
import java.util.stream.*;

class Solution {
    public int[] solution(int[] arr) {
        
        // 1. 최대값 구하기
        int max = Arrays.stream(arr).max().getAsInt();
        
        // 2. 최대값 배열 만들기
        int[] answer =  IntStream.range(0, arr.length).filter(i -> arr[i] == max).toArray();
        
        return answer;
    }
}

출처 : 프로그래머스 스쿨 "[JAVA] 어서와! 자료구조 알고리즘은 처음이지?"

profile
친절한 개발자

0개의 댓글