티스토리 뷰
[Java/Programmers]
Lv.1 폰켓몬
⬇︎ ⬇︎ ⬇︎ 문 제 링 크 ⬇︎ ⬇︎ ⬇︎
programmers.co.kr/learn/courses/30/lessons/1845
입/출력
(입력)
N마리의 폰켓몬의 종류 번호가 들어있는 배열 nums (1 ~ 10,000 사이, 항상 짝수)
(출력)
N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법 (종류 번호 1 ~ 200,000 이하의 자연수)
해결 과정
이 문제를 읽었을 때 제일 먼저 떠올랐던 것은 바로 중복 제거다.
폰켓몬 종류 숫자가 들어있는 nums 배열에서 중복을 제거한 다음 개수를 계산하면 쉽게 문제를 풀 수 있을 거라고 생각했다.
for문을 돌려 nums의 값들 중 중복되지 않는 값들만 arrayList에 넣었고,
마지막에 arraylist.size와 nums.length/2의 값을 비교해 더 작은 값을 반환했다.
풀이
public static int solution(int[] nums) {
int answer = 0;
// nums 에서 중복되지 않는 값만을 arrayList에 넣는다.
ArrayList<Integer> arrayList = new ArrayList<Integer>();
for(int i = 0; i < nums.length; i++) {
if(!arrayList.contains(nums[i])) {
arrayList.add(nums[i]);
// 결과적으로 answer와 arrayList.size()의 값은 동일
answer++;
}
}
// N/2 (종류의 최댓값) 과 중복 제거된 arraylist의 길이를 비교해 더 작은 것을 return한다.
int max_answer = nums.length / 2;
if(max_answer < answer) {
return max_answer;
} else {
return answer;
}
}
후기
문제가 길어서 이해하는데 시간이 소요됐지만 이해하고 나니 생각보다 빨리 해결방법을 찾을 수 있었다.
처음에는 이렇게 풀어도 되려나..? 라는 생각으로 코드를 작성했는데 한번에 정답이 나와서 약간 허탈하기도 했다.
너무 어렵게 생각하기 보다는 먼저 생각나는 해결방법을 시도해보고 안되면 다른방법을 시도하는 것도 괜찮은 것 같다.
'Algorithm' 카테고리의 다른 글
[Java/Programmers] Lv.1 두 개 뽑아서 더하기 (0) | 2021.04.09 |
---|---|
[Java/Programmers] Lv.2 카카오프렌즈 컬러링북 (0) | 2021.04.08 |
[Java/백준(boj)] 2010번. 플러그 (0) | 2021.03.06 |
[Java/백준(boj)] 1453번. 피시방 알바 (0) | 2021.03.04 |
[Java/백준(boj)] 2145번. 숫자놀이 (0) | 2021.02.26 |
댓글