본문 바로가기
1-4. 코딩테스트 문제집(진행중)/PCCP(Lv1)

[PCCP] Lv1: 폰켓몬(1845) 해설

by cogito21_cpp 2024. 12. 24.
반응형

문제

- 문제 링크: 폰켓몬

 

해설

- 자료구조: 

- 시간복잡도: 

 

(풀이과정)

1) 

2) 

3) 

4) 

 

코드

(C언어)

solution 1)

더보기
#include<>

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(C++)

solution 1)

더보기
#include <vector>
#include <set>
using namespace std;

int solution(vector<int> nums)
{
    int answer = nums.size()/2;
    int cnt = 0;
    set<int> s;
    for (size_t i = 0; i < nums.size(); ++i){
        s.insert(nums[i]);
    }
    cnt = s.size();
    if (cnt < answer)
        answer = cnt;
    return answer;
}

solution 2)

더보기
#include<>

solution 3)

- nums를 집합으로 변환: O(N)

더보기
#include <unordered_set>
#include <vector>

using namespace std;

int solution(vector<int> nums)
{
    int answer = 0;
    
    // s는 nums의 중복값을 제거한 집합
    unordered_set<int> s(nums.begin(), nums.end());
    // nums/2의 개수와 s의 개수 중 작은 값을 반환
    answer = min(nums.size()/2, s.size());
    
    return answer;
}

 

(C#)

solution 1)

더보기
#include<>

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(Java)

solution 1)

- N: nums의 길이

- nums를 해시셋으로 변환: O(N)

- 폰켓몬 수를 구하고 선택: O(1)

- 최종 시간 복잡도: O(N)

더보기
import java.util.Arrays;
import java.util.HashSet;
import java.util.stream.Collectors;

class Solution {
    public int solution(int[] nums) {
        // nums 리스트에서 중복을 제거한 집합(set)을 구함
        HashSet<Integer> set = Arrays.stream(nums).boxed().collect(Collectors.toCollection(HashSet::new));
        // 폰켓몬의 총 수
        int n = nums.length;
        // 선택할 폰켓몬의 수
        int k = n / 2;
        // 중복을 제거한 폰켓몬의 종류 수와 선택할 폰켓몬의 수 중 작은 값 변환
        return Math.min(k, set.size());
    }
}

solution 2)

더보기
import java.util.Arrays;

class Solution {
    public int solution(int[] nums) {
        return Math.min((int) Arrays.stream(nums).distinct().count(), nums.length / 2);
    }
}

solution 3)

더보기
#include<>

 

(Python)

solution 1)

- N: nums의 길이

- nums를 set()으로 변환: O(N)

- 폰켓몬 수를 구하고 선택할 때의 시간복잡도: O(1)

- 최종 시간 복잡도: O(N)

더보기
def solution(nums):
    num_set = set(nums) # nums 리스트에서 중복을 제거한 집합(set)을 구함
    n = len(nums) # 폰켓몬의 총 수
    k = n // 2 # 선택할 폰켓몬의 수
    # 중복을 제거한 폰켓몬의 종류 수와 선택할 폰켓몬의 수 중 작은 값 반환
    return min(k, len(num_set))

solution 2)

더보기
def solution(nums):
    answer = 0
    max_num = len(nums)//2
    set_num = len(set(nums))
    if (set_num > max_num):
        answer = max_num
    else:
        answer = set_num
    return answer

solution 3)

더보기
import

 

(JavaScript)

solution 1)

- N: nums의 길이

- nums를 set()으로 변환: O(N)

- 폰켓몬 수를 구하고 선택: O(1)

- 최종 시간 복잡도: O(N)

더보기
function solution(nums) {
    const numSet = new Set(nums); // nums 배열에서 중복을 제거한 집합을 구함
    const n = nums.length; // 폰켓몬의 총 수
    const k = n / 2; // 선택할 폰켓문의 수
    
    // 중복을 제거한 폰켓몬의 종류 수와 선택할 폰켓몬의 수 중 작은 값을 반환
    return Math.min(k, numSet.size);
}

solution 2)

더보기
import

solution 3)

더보기
import

 

반응형