[Programmers]#Level2_롤 케이크 자르기, set, map

2024. 5. 17. 20:19· 문제 풀이/Programmers 문제 풀이
목차
  1. #1. 문제
  2. #2. 풀이
  3. 1. map 컨테이너
  4. 2. set 컨테이너
  5. 3. 민수의 롤 케이크는 map, 철수의 롤 케이크는 set
  6. #3. 코드

 

#1. 문제

 

프로그래머스

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

programmers.co.kr

 


 

#2. 풀이

 

1. map 컨테이너

 

[Basic C++] #38_map, 연관 컨테이너

#1. 개념 1. map [정의] : C++의 STL에서 제공하는 map 컨테이너는 지정된 형식의 키와 데이터 값을 한 쌍으로 레드-블랙 트리 자료구조에 저장하는 연관 컨테이너입니다. [특징] : map 컨테이너는 오직

webddevys.tistory.com

C++ 표준라이브러리에서 제공하는 map 컨테이너는 지정된 형식의 키와 값을 한 쌍으로 레드-블랙 트리 자료구조에 저장하는 연관 컨테이너입니다. map 컨테이너는 중복을 허용하지 않고 내부적으로 정렬된 상태를 유지하며, 키 값을 기준으로 오름차순 정렬하는 것이 특징입니다. 

 

2. set 컨테이너

 

[Basic C++] #29_Set, STL 컨테이너

[Basic C++] #29_Set, STL 컨테이너 C++ 개발에서 STL 컨테이너에 대해 알아보겠습니다. C++가 제공하는 STL 컨테이너 중 Set과 MultiSet을 살펴보겠습니다. #0. 개념 1. 개념 Set은 STL에서 제공하는 연관 컨테이

webddevys.tistory.com

C++ 표준 라이브러리에서 제공하는 set 컨테이너는 지정된 형식의 키를 레드-블랙 트리 자료구조에 저장하는 연관 컨테이너입니다. set 컨테이너는 키를 기준으로 중복을 허용하지 않고 내부적으로 정렬된 상태를 유지하며, 키 값을 기준으로 오름차순 정렬하는 것이 특징입니다.

 

3. 민수의 롤 케이크는 map, 철수의 롤 케이크는 set

  1. 먼저, 숫자의 가짓수를 키, 그 개수를 값으로 map 컨테이너에 저장합니다. 그리고, 우리는 이를 '민수'의 롤 케이크로 가정합니다.
  2. 그리고, map 컨테이너가 내부적으로 '숫자의 가짓수'(키)를 기준으로 오름차순 정렬하는 것을 이용하여, 가장 적은 가짓수를 갖는 토핑부터 set에 추가해 줍니다. 그리고, 우리는 set 컨테이너를 '철수'의 롤케이크로 가정합니다.
  3. 위 작업을 반복하며, map 컨테이너의 키의 갯수와 set 컨테이너의 키의 개수가 같다면, 정답을 카운트해줍니다.

 


 

#3. 코드

// #1. 첫 번째 코드, 시간 초과 실패

// #include <string>
// #include <vector>
// #include <set>
// using namespace std;

// int solution(vector<int> topping) {
//     int answer = 0;
//     // 철수 롤케이크의 토밍 가짓수
//     set<int> s1;

//     for(int i=0; i<(int)topping.size()-1; ++i)
//     {
//         // 철수 롤케이크에 현재 토핑 추가
//         s1.insert(topping[i]);
//         set<int> s2;
//         for(int j = i+1; j<(int)topping.size(); ++j)
//         {
//             s2.insert(topping[j]);
//         }

//         // 철수 롤케이크의 토핑 vs 민수 롤케이크의 토핑
//         if(s1.size() == s2.size())
//         {
//             answer++;
//         }
//     }

//     return answer;
// }

/*
    @문제 : 배열을 두 부분 배열로 분할했을때, 숫자의 가짓수가 동일한 모든 경우의 수
    @설명 
            1. 먼저, map을 통해 각 숫자의 가짓수 모두 세고, 이를 민수의 롤케이크로 가정하자
            2. 다음으로, 민수의 롤케이크를 왼쪽부터 야금 야금 철수한테 떼주며, map 과 set의 key 값의 개수를 비교하며 경우의 수를 센다.
*/
// #2. 두 번째 코드, 철수 롤케이크는 set + 민수 롤케이크는 map

#include <string>
#include <vector>
#include <map>
#include <set>
using namespace std;

int solution(vector<int> topping) {

    int answer = 0;
    map<int,int> m_cake; // 민수 롤케이크
    set<int> c_cake; // 철수 롤케이크

    // #1. 민수(철수 동생) 롤케이크를 다먹는다!
    for(int i=0; i<(int)topping.size(); ++i)
    {
        // #1. 이미 있던 토핑이야, 응 늦었어~
        if(m_cake.find(topping[i]) != end(m_cake))
        {
            m_cake[topping[i]]++;
        }
        // #2. 처음 보는 토핑이야, 응 안늦었어~
        else
        {
            m_cake.insert({topping[i], 1});
        }
    }

    // #2. 철수가 민수 롤케이크를 왼쪽부터 하나씩 야금야금 뺏어온다!
    for(int i=0; i<(int)topping.size(); ++i)
    {
        // #1. 민수 롤케이크에 이 토핑은 하나 줄어들어~
        if(m_cake.find(topping[i]) != end(m_cake))
        {
            if(--m_cake[topping[i]] == 0)
            {
                // 어? 그러면 이 토핑은 민수 롤케이크에 없는데?
                m_cake.erase(topping[i]);
            }
        }
        // #2. 철수 롤케이크에 이 토핑을 추가해볼까~?
        c_cake.insert(topping[i]);

        // #3. 철수 롤케이크 토핑 가짓수 vs 민수 롤케이크 토핑 가짓수
        if(c_cake.size() == m_cake.size())
        {
            answer++;
        }
    }

    return answer;
}

 


 

 

 

 

저작자표시 (새창열림)

'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글

[Programmers, C++]#Level3_단속카메라, 우선순위 큐  (0) 2024.07.09
[Programmers]#Level3_베스트 앨범, map, priority_queue, erase, sort, predicate 함수  (0) 2024.05.17
[Programmers]#Level3_숫자 게임, 우선순위 큐, 스택  (0) 2024.05.17
[Programmers]#Level2_숫자 변환하기, DP  (0) 2024.05.17
[Programmers]#Level3_등굣길, DP  (0) 2024.05.17
  1. #1. 문제
  2. #2. 풀이
  3. 1. map 컨테이너
  4. 2. set 컨테이너
  5. 3. 민수의 롤 케이크는 map, 철수의 롤 케이크는 set
  6. #3. 코드
'문제 풀이/Programmers 문제 풀이' 카테고리의 다른 글
  • [Programmers, C++]#Level3_단속카메라, 우선순위 큐
  • [Programmers]#Level3_베스트 앨범, map, priority_queue, erase, sort, predicate 함수
  • [Programmers]#Level3_숫자 게임, 우선순위 큐, 스택
  • [Programmers]#Level2_숫자 변환하기, DP
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • 우선순위 큐
  • BOJ
  • set
  • 트리
  • Unreal Blueprint
  • 알고리즘
  • 그래프
  • 기술 질문
  • 디자인 패턴
  • DP
  • 개발
  • Effective C++
  • stl
  • dfs
  • unreal
  • programmers
  • 정렬
  • BFS
  • C++
  • 최단 경로

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Programmers]#Level2_롤 케이크 자르기, set, map
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.