본문 바로가기
코딩테스트/문제풀이 팁

int[] -> List<Integer> 반환? 메소드 리턴타입을 바꾸자

by asdft 2024. 2. 19.

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

import java.util.*;
class Solution {
    public int[] solution(int[] answers) {
        int[] user1 = {1,2,3,4,5};
        int[] user2 = {2,1,2,3,2,4,2,5};
        int[] user3 = {3,3,1,1,2,2,4,4,5,5};
        
        //맞춘 개수를 담을 배열
        int[] cnt = {0,0,0};
        
        //가장 많이 맞춘 사람 넣는 리스트
        List<Integer> list = new ArrayList<>();
        
        for(int i=0;i<answers.length;i++){
            if(user1[i%5] == answers[i]){cnt[0]++;}
            
            if(user2[i%8] == answers[i]){cnt[1]++;}

            if(user3[i%10] == answers[i]){cnt[2]++;}
        }

        int max = Math.max(cnt[0],Math.max(cnt[1],cnt[2]));
        
        for(int i=0;i<cnt.length;i++){
            if(max == cnt[i]){
                list.add(i+1);
            }
        }
        
        return list;
    }
}

 

위 코드에서 잘못된 점은 무엇일까?

바로 반환 타입이다.

 

 

이 문제의 초기 반환타입은 int[ ] 타입이다.

하지만 나는 List를 선언하면서 클래스 타입인 Integer 타입을 반환하려고 한것이다.

 

 

List<Integer> 타입은 당연히 int[ ]로 변환될 수 없어 타입 불일치로 인해 오류가 생긴다.

처음에 나는 이 int[ ] -> List<Integer>로 바꾸려 삽질했지만 

그러지 말고 문제의 메소드 리턴 타입을 int [] 형에서 List<Integer>로 바꾸면 된다!!

 

 

그 결과, 아래와 같이 코드를 수정하였다.

import java.util.*;
class Solution {
    public List<Integer> solution(int[] answers) {
        int[] user1 = {1,2,3,4,5};
        int[] user2 = {2,1,2,3,2,4,2,5};
        int[] user3 = {3,3,1,1,2,2,4,4,5,5};
        
        //맞춘 개수를 담을 배열
        int[] cnt = {0,0,0};
        
        //가장 많이 맞춘 사람 넣는 리스트. 삽입을 쉽게 하기 위해 ArrayList 사용.
        List<Integer> list = new ArrayList<>();
        
        for(int i=0;i<answers.length;i++){
            if(user1[i%5] == answers[i]){cnt[0]++;}
            
            if(user2[i%8] == answers[i]){cnt[1]++;}

            if(user3[i%10] == answers[i]){cnt[2]++;}
        }

        int max = Math.max(cnt[0],Math.max(cnt[1],cnt[2]));
        
        for(int i=0;i<cnt.length;i++){
            if(max == cnt[i]){
                list.add(i+1);
            }
        }
        
       System.out.println(list);
        return list;
    }
}

 

위 문제에서 알아야 할 팁!!!!

 

1) 어떠한 배열에서 Value값을 가져와 삽입 & 삭제 할땐, ArrayList 배열을 선언해서 거기에 넣어주도록 한다.

(ArrayList : 데이터의 추가나 삭제에 용이)

 

2) 위에서 ArrayList는 제너릭 타입을 필요로 해, 클래스 타입의 변수선언을 필요로 한다.

    따라서 이럴 때에는 메소드의 리턴 타입을 바꿔주도록 한다.

 

3) 흔히 Math.max()로 최대값을 구할 때, 두 수 비교를 많이 하지만,

     한쪽 인자에 Math.max를 넣어서 세 수 중 가장 큰 수를   찾아 낼 수도 있다.