SHUSTORY

[ 백준 ] 2562번 : 최댓값 본문

코딩테스트/JAVA

[ 백준 ] 2562번 : 최댓값

어서오시우 2023. 12. 4. 14:06
728x90
문제

 

 

내 풀이 및 코드 리뷰
import java.util.Arrays;
import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] intArray = new int[9];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = sc.nextInt();
}
int max = Arrays.stream(intArray).max().getAsInt();
System.out.println(max);
System.out.println(Arrays.asList(intArray).indexOf(max));
}
}
  • 이렇게 코드를 작성하면 최댓값은 찾을 수 있지만 index 값이 -1이 나온다.
    • indexOf( ) 메소드는 String 타입과 List 계열의 타입에서만 사용 가능하다. 
    • Arrays.asList(intArray)를 사용하여 기본 배열을 리스트로 변환하면, 이 리스트의 indexOf 메소드는 기본 데이터 타입에 대한 boxing이 발생하여 제대로 동작하지 않는다.
      int 배열을 Integer 리스트로 변환하는 과정에서 박싱이 발생하면서 배열의 값들이 객체로 변환되기 때문이다.
      • 박싱은 기본 데이터 타입 ( int, char, double... )을 해당하는 래퍼 클래스로 변환하는 과정을 말한다.
        int ( 기본 데이터 타입 ) - Integer ( 래퍼 클래스 )
        char - Character
        double - Double
        과 같이 기본 타입에서 래퍼 클랙스 객체로 변환하는 것이 박싱,
        그 반대로 래퍼 클래스에서 기본 데이터 타입으로 변환하는 것이 언박싱이다.
      • 위 코드에서 박싱이 발생한 이유가 무엇일까?
        자바에서 제네릭 타입이나 컬렉션을 사용할 때, 기본 데이터 타입은 사용할 수 없기 때문이다.
        컬렉션은 객체를 다루는 구조이기 때문에 기본 데이터 타입을 직접 사용할 수 없다.
        따라서 제네릭 타입의 컬렉션인 List를 사용하기 위해서
        기본 데이터 타입의 값들을 객체로 감싸기 위해 박싱이 발생하는 것이다.

 

수정한 코드
import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] intArray = new int[9];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = sc.nextInt();
}
int max = intArray[0];
for (int arr:intArray) {
max = (max>arr)? max : arr;
}
int arrayIndex = 0;
for (int i = 0; i < intArray.length; i++) {
if (max == intArray[i]){
arrayIndex = i+1;
}
}
System.out.println(max);
System.out.println(arrayIndex);
sc.close();
}
}

 

다른 풀이

( 1 )

import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] intArray = new int[9];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = sc.nextInt();
}
int max = intArray[0];
int count = 0;
int index = 0;
for (int arr:intArray) {
count ++;
if (arr > max){
max = arr;
index = count;
}
}
System.out.println(max + "\n" + index);
sc.close();
}
}