기록하지 않았다면 잃어버릴 시간들
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
블로그 내 검색

기록하지 않았다면 잃어버릴 시간들

새로운 것을 배우는게 즐거운 개발자입니다.

  • 알고리즘/프로그래머스

    2023 카카오 블라인드 코딩테스트 3번 이모티콘 할인행사 / C++

    2023. 1. 8.

    by. 내이름은 킹햄찌

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

     

    프로그래머스

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

    programmers.co.kr

    아이디어

    이모티콘의 개수가 최대 7개, 할인율은 4종류이기 때문에 완전탐색으로 풀이 가능 판단

    모든 이모티콘에 대해 모든 할인율을 적용하여 최대이모티콘 플러스 가입자가 되는 경우에서의 최대 금액을 구했다.  

     

    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int dcPercent[4] = { 40,30,20,10 };
    int payMax;
    int subMax;
    int emoticonsCnt;
    vector<int> g_emoticons;
    vector<vector<int>> g_users;
    
    vector<bool> visited;
    vector<int>emoticonsDcInfo;
    vector<int>userPayInfo;
    
    void calculate() {
    
    	userPayInfo.clear();
    	userPayInfo.resize(g_users.size(), 0);
    
    	//모든 이모티콘 순회
    	for (int e = 0; e < g_emoticons.size(); e++) {
    		//유저 순회
    		for (int u = 0; u < g_users.size(); u++) {
    			//퍼센트가 안맞다면 안삼
    			if (dcPercent[emoticonsDcInfo[e]] < g_users[u][0]) continue;
    			userPayInfo[u] += g_emoticons[e] - (g_emoticons[e] * dcPercent[emoticonsDcInfo[e]] / 100);
    		}
    	}
    
    	int currentPay = 0;
    	int currentSub = 0;
    	for (int u = 0; u < g_users.size(); u++) {
    		//결제금액이 기준을 넘어서면 구독해야함
    		if (userPayInfo[u] >= g_users[u][1]) {
    			currentSub++;
    		}
    		//넘지 못하면 지불 금액으로 처리
    		else {
    			currentPay += userPayInfo[u];
    		}		
    	}
    	if (subMax < currentSub) {
    		subMax = currentSub;
    		payMax = currentPay;
    	}
    	else if (subMax == currentSub) {
    		if (payMax < currentPay) {
    			payMax = currentPay;
    		}
    	}
    }
    
    void dfs(int current) {
    	if (current == emoticonsCnt) {
    		calculate();
    		return;
    	}
    	for (int i = 0; i < 4; i++) {
    		emoticonsDcInfo[current] = i;
    		dfs(current+1);
    	}
    	return;
    }
    
    vector<int> solution(vector<vector<int>> users, vector<int> emoticons) {
    	vector<int> answer;
    	g_emoticons = emoticons;
    	g_users = users;
    	emoticonsCnt = emoticons.size();
    	emoticonsDcInfo.resize(emoticonsCnt, 0) ;
    	visited.resize(emoticonsCnt, false);
    	//모든 이모티콘을 확인해야함
    	dfs(0);
    	answer = { subMax,payMax };
    	return answer;
    }

    '알고리즘 > 프로그래머스' 카테고리의 다른 글

    2023 카카오 블라인드 코딩테스트 4번 표현 가능한 이진트리 / C++  (0) 2023.02.18
    2023 카카오 블라인드 코딩테스트 6번 미로 탈출 명령어 / C++  (0) 2023.02.18
    2023 카카오 블라인드 코딩테스트 2번 택배 배달과 수거하기 / C++  (0) 2023.01.08
    2023 카카오 블라인드 코딩테스트 1번 개인정보 수집 유효기간 / C++  (0) 2023.01.08
    Programers 최고의 집합 / C++  (0) 2022.12.04

    댓글

    관련글

    • 2023 카카오 블라인드 코딩테스트 4번 표현 가능한 이진트리 / C++ 2023.02.18
    • 2023 카카오 블라인드 코딩테스트 6번 미로 탈출 명령어 / C++ 2023.02.18
    • 2023 카카오 블라인드 코딩테스트 2번 택배 배달과 수거하기 / C++ 2023.01.08
    • 2023 카카오 블라인드 코딩테스트 1번 개인정보 수집 유효기간 / C++ 2023.01.08
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
내이름은 킹햄찌

티스토리툴바