문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/1845

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이법

중복되는 수를 피하면 되는터라, 처음에는 정렬을 하고 중복되는 수를 무시하는 방법을 선택하려 했다

하지만 너무 비효율적인것 같았고 찾아보니 set이라는 컨테이너가 있었다

 

set은 노드 기반 컨테이너이며 균형 이진으로 구현되어있으며, key라 불리는 원소들의 집합으로 이루어진 컨테이너이다

중요한 것은 key값은 중복이 허용되지 않고, 삽입 시 원소는 자동 정렬이다

 

그러기에 set으로 insert를 하고, n / 2의 값과 비교하여 set의 길이가 n / 2보다 작으면 set의 길이를,

그렇지 않으면 n / 2개를 리턴하도록 하였다

 

소스 코드

#include <vector>
#include <set>

using namespace std;

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

'Algorithm Study' 카테고리의 다른 글

[프로그래머스] 1단계 - 실패율  (0) 2023.01.11
[프로그래머스] 1단계 - 소수 찾기  (0) 2023.01.11
[백준] 1158 요세푸스 문제  (0) 2023.01.10
[백준] 5397 키로거  (0) 2023.01.10
[백준] 1406 에디터  (0) 2023.01.10
복사했습니다!