-
반응형
https://programmers.co.kr/learn/courses/30/lessons/1845
코딩테스트 연습 - 폰켓몬
당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.
programmers.co.kr
-풀이-
해당 번호의 폰켓몬이 나왔는지 확인 할 수 있는 bool check[200001]을 선언한다. check[i]=true이면 i번 폰켓몬을 종류의 수에 포함시켰다는 것이고, false이면 i번 폰켓몬을 종류의 수에 포함되지 않았다는 것이다.
따라서 nums배열을 돌며, 해당 폰켓몬이 종류의 수에 포함되지 않았다면, 종류의 수를 1 증가시킨 뒤, 해당 check[i]를 true로 설정해준다.
이렇게 nums배열에 총 몇종류가 있는지 확인을 한 뒤, 종류의 개수와 N/2를 비교하여, 더 작은 쪽이 가장 많은 종류의 폰켓몬을 선택하는것이 되는것이다.
-시간복잡도-
nums의 배열의 길이를 N이라고 한다면, O(N)시간이 된다.
-코드-
#include <vector> #include<algorithm> using namespace std; bool check[200001]={0}; int solution(vector<int> nums) { int answer = 0; int n=nums.size(); int race=0; //종류의 수를 세어주는 for문 for(int i=0;i<n;i++){ int now=nums[i]; if(!check[now]){ check[now]=true; race++; } } //종류의 수와 n/2를 비교하여 더 작은쪽이 최댓값 answer=min(race,n/2); return answer; }
반응형'문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 실패율 (0) 2021.06.01 [프로그래머스] 예산 (0) 2021.05.31 [프로그래머스] 키패드 누르기 (0) 2021.05.29 [프로그래머스] 배달 (0) 2021.05.24 [프로그래머스] 짝지어 제거하기 (0) 2021.05.17 댓글