티스토리 뷰
[ 프로그래머스 ] 찾아라 프로그래밍 마에스터- 포켓몬 ( 자바 )
N마리의 포켓몬에서 N/2 마리를 선택한다.
포켓몬마다 종류에 따른 번호가 부여되어 있는데, N/2마리르 선택했을 때, 가능한 가장 많은 종류 개수 구하기
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/1845
코딩테스트 연습 - 폰켓몬 | 프로그래머스
당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번
programmers.co.kr
핵심
-
처음에 완탐으로 (nCn/2) 모든 선택 가능한 가짓수를 구하고 hashSet으로 종류를 세려고 했다.
하지만, N은 최대 200,000으로 완탐하면 시간초과된다. -
목적이 가능한 최대한 많은 수를 구해야 한다.
단순하게 hashSet( 또는, treeSet) 을 이용하여 모든 종류를 구하고 비교하여 답을 계산한다. 구조 참고
이 문제는 hashSet써도 통과되지만, hash collision 대비해서 treeSet쓰기, O(N) -> O(logN)
구조
for ( 모든 포켓몬에 대해 )
treeSet에 포켓몬 종류 넣기
if ( treeSet.size > N/2 )
return N/2
else
return treeSet.size
1 모든 종류가 N/2보다 많다면, N/2 뽑는 것 중 최대는 N/2다.
2 모든 종류가 N/2보다 적다면, N/2 뽑는 것 중 최대는 전체 종류.
이렇게 굳이 모든 경우를 구해보지 않아도 된다.
추가적으로 더 궁금한 점 있으면 댓글 달아주세요
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import java.util.*;
class Solution {
public int solution(int[] nums) {
TreeSet<Integer> hs = new TreeSet<Integer>();
for(int i = 0 ; i < nums.length; i++){
hs.add(nums[i]);
}
if(nums.length/2 < hs.size()){
return nums.length/2;
}else{
return hs.size();
}
}
}
|
cs |
'CS > 알고리즘 풀이' 카테고리의 다른 글
[프로그래머스] 콜라츠 추측 ( java ) (0) | 2019.12.13 |
---|---|
[프로그래머스] 최대공약수와 최소공배수 ( java ) (0) | 2019.12.13 |
[ 프로그래머스 ] 정수 내림차순으로 배치하기 ( java ) (2) | 2019.12.08 |
[ 프로그래머스 ] 문자열을 정수로 바꾸기 ( java ) (0) | 2019.12.06 |
[ 프로그래머스 ] 시저암호 ( java ) (0) | 2019.12.06 |
- Total
- Today
- Yesterday
- 라면공장
- 후보키
- 게리맨더링 2
- 프로그래머스
- 괄호 변환
- 가장 큰 정사각형 찾기
- java
- 짝지어 제거하기
- 124 나라의 숫자
- 찾아라 프로그래밍 마에스터
- 단체사진 찍기
- 3954
- 문자열을 정수로 바꾸기
- 주사위 윷놀이
- 카카오2020 공채
- 2018 카카오 공채
- 투포인터
- 티스토리챌린지
- 17825
- 2019 카카오 공채
- 17779
- programmers
- Brainf**k 인터프리터
- 정수 내림차순으로 배치하기
- 오블완
- 백준
- 큰 수 만들기
- 카카오 2020 공채
- 자바
- DP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |