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

 

프로그래머스

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

programmers.co.kr


문제 내용 : 두 사람한테 [토핑 종류의 갯수가 똑같이 분배되게 하는 방법의 수]를 찾는 문제

ex) A : 1 ,2 ,4  / B : 2, 3 ,4 => 토핑 종류는 다르지만 토핑의 종류의 갯수가 같으므로 맞는 경우

ex) A : 1,1,2,3, / B : 1,2,2,2,3 =>토핑 종류 갯수 같음

 

우선 토핑 갯수 및 종류에 상관 없기에 중복을 허용하지 않으면 레드-블랙트리 기반으로하는 map 자료 구조를 사용하였다.

map<int,int> // 토핑종류 , 토핑 갯수

 


첫번째 접근 방법 : A한테 n개 ,B한테 [전체 - n개] 나눠주기

지문 그대로 나눠주고 그 결과가 맞는지를 체크하기로 했다.
하지만 이렇게 되면 topping을 순회하는 반복문 1개 ,반복문 안에서 나눠주는 반복문이 2개로 loop가 토핑갯수 하나마다 loop수가 제곱이되는 상황이 발생이 되어 시간복잡도에 문제가 발생


두번째 접근 방법 : A한테 topping을 다 몰아준 후 , 반복문이 한번 loop할때마다 B한테 하나씩 주기

이렇게 되면 인자값으로 주는 토핑 배열 길이만큼만 순회하면 모든 방법을 알 수 있다.


코드 영역

더보기
#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

int solution(vector<int> topping) {
    int answer = 0;
    
    //A라는 사람의 topping map
    map<int,int>  map_A;
    //A의 빵에 모든 토핑을 올려놓기
    for (int elements : topping)
    {
        map<int, int> ::iterator iter = map_A.find(elements);

        if (iter != map_A.end()) iter->second++;
        else  map_A.insert({ elements,1 });
    }
    
     //A라는 사람의 topping map
    map<int, int> map_B;
    
     //토핑의 갯수만큼 순회를 하며 A의 토핑을 B한테 하나씩 주며 체크하기
    for (int i = 0; i < topping.size(); i++)
    {
        int pivot = topping[i];
 
        //map_A의 원소 제거 (B한테 하나 주기)
        map<int, int> ::iterator iter = map_A.find(pivot);
        if (iter != map_A.end())
        {
            iter->second--;
            if (iter->second <= 0) map_A.erase(iter);
        }

        //map_B의 원소 추가 (A한테서 받은 토핑 추가하기)
        iter = map_B.find(pivot);
        if (iter != map_B.end()) iter->second++;
        else  map_B.insert({ pivot,1 });

        //각 토핑의 map갯수가 같은지 체크 
        if (map_A.size() == map_B.size()) answer++;
    }

    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV1.체육복  (0) 2023.10.26
LV2.택배상자  (0) 2023.10.26
LV2.숫자 변환하기  (0) 2023.10.26
LV2.2개 이하로 다른 비트  (0) 2023.10.26
LV.1 같은 숫자는 싫어  (0) 2023.06.09

+ Recent posts