GitHubSeob
C++ / 프로그래머스 / 폰켓몬 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/1845
코딩테스트 연습 - 폰켓몬
당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.
programmers.co.kr
문제풀이
복잡해 보일 수 있는데 간단히 보면 경우의 개수가 아닌 몇 마리의 폰켓몬을 고를 수 있는지만 구하면 된다.
폰켓몬의 최대 개수를 넘으면 최대 개수를 출력하고 그렇지 않으면 폰켓몬의 종류의 개수를 출력하면 된다.
현재 인덱스의 값과 인덱스+1 값을 비교하면서 둘이 같으면 인덱스+1 값을 지운다.
그렇지 않으면 인덱스 값을 1 증가시켜 다음수를 탐색한다.
반복이 끝나면 바뀐 nums.size와 맨 처음 nums.size/2의 값 중 작은 값을 return 한다.
코드
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> nums)
{
int max_cnt = nums.size() / 2;
sort(nums.begin(), nums.end());
for (int idx = 0; idx < nums.size() - 1;) {
if (nums[idx] == nums[idx + 1]) nums.erase(nums.begin() + idx + 1);
else idx++;
}
int nums_size = nums.size();
return min(max_cnt, nums_size);
}
'Programmers > Level 1' 카테고리의 다른 글
C++ / 프로그래머스 / 약수의 개수와 덧셈 (0) | 2021.08.21 |
---|---|
C++ / 프로그래머스 / 실패율 (0) | 2021.08.21 |
C++ / 프로그래머스 / 신규 아이디 추천 (1) | 2021.08.15 |
C++ / 프로그래머스 / 소수 만들기 (0) | 2021.08.15 |
C++ / 프로그래머스 / 내적 (0) | 2021.08.15 |