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를 넣어서 세 수 중 가장 큰 수를 찾아 낼 수도 있다.
'코딩테스트 > 문제풀이 팁' 카테고리의 다른 글
[HashSet, HashMap] 롤케이크 자르기 (0) | 2024.02.26 |
---|---|
[HashMap] 여러 요소와 요소의 개수세기 (0) | 2024.02.25 |
[PriorityQueue] 효율적인 스케줄링 (0) | 2024.02.21 |
시간 복잡도 계산 (1) | 2024.02.20 |
중복을 저장하지 않는 배열-HashSet (1) | 2024.02.13 |