[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 할인 행사(C++)

2023. 8. 3. 15:33Β·πŸ–₯️ Study Note/Coding Test

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

문제 μ„€λͺ…

XYZ λ§ˆνŠΈλŠ” μΌμ •ν•œ κΈˆμ•‘μ„ μ§€λΆˆν•˜λ©΄ 10일 λ™μ•ˆ νšŒμ› μžκ²©μ„ λΆ€μ—¬ν•©λ‹ˆλ‹€. XYZ λ§ˆνŠΈμ—μ„œλŠ” νšŒμ›μ„ λŒ€μƒμœΌλ‘œ 맀일 ν•œ κ°€μ§€ μ œν’ˆμ„ ν• μΈν•˜λŠ” 행사λ₯Ό ν•©λ‹ˆλ‹€. ν• μΈν•˜λŠ” μ œν’ˆμ€ ν•˜λ£¨μ— ν•˜λ‚˜μ”©λ§Œ ꡬ맀할 수 μžˆμŠ΅λ‹ˆλ‹€. μ•Œλœ°ν•œ μ •ν˜„μ΄λŠ” μžμ‹ μ΄ μ›ν•˜λŠ” μ œν’ˆκ³Ό μˆ˜λŸ‰μ΄ ν• μΈν•˜λŠ” λ‚ μ§œμ™€ 10일 μ—°μ†μœΌλ‘œ μΌμΉ˜ν•  κ²½μš°μ— λ§žμΆ°μ„œ νšŒμ›κ°€μž…μ„ ν•˜λ € ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ΄ λ°”λ‚˜λ‚˜ 3개, 사과 2개, μŒ€ 2개, 돼지고기 2개, 냄비 1개이며, XYZ λ§ˆνŠΈμ—μ„œ 15일간 νšŒμ›μ„ λŒ€μƒμœΌλ‘œ ν• μΈν•˜λŠ” μ œν’ˆμ΄ λ‚ μ§œ μˆœμ„œλŒ€λ‘œ μΉ˜ν‚¨, 사과, 사과, λ°”λ‚˜λ‚˜, μŒ€, 사과, 돼지고기, λ°”λ‚˜λ‚˜, 돼지고기, μŒ€, 냄비, λ°”λ‚˜λ‚˜, 사과, λ°”λ‚˜λ‚˜μΈ κ²½μš°μ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€. 첫째 λ‚ λΆ€ν„° μ—΄ν˜ κ°„μ—λŠ” 냄비가 ν• μΈν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 첫째 λ‚ μ—λŠ” νšŒμ›κ°€μž…μ„ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‘˜μ§Έ λ‚ λΆ€ν„° μ—΄ν˜ κ°„μ—λŠ” λ°”λ‚˜λ‚˜λ₯Ό μ›ν•˜λŠ” 만큼 할인ꡬ맀할 수 μ—†κΈ° λ•Œλ¬Έμ— λ‘˜μ§Έ 날에도 νšŒμ›κ°€μž…μ„ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ…‹μ§Έ λ‚ , λ„·μ§Έ λ‚ , λ‹€μ„―μ§Έ λ‚ λΆ€ν„° 각각 μ—΄ν˜μ€ μ›ν•˜λŠ” μ œν’ˆκ³Ό μˆ˜λŸ‰μ΄ μΌμΉ˜ν•˜κΈ° λ•Œλ¬Έμ— μ…‹ 쀑 ν•˜λ£¨μ— νšŒμ›κ°€μž…μ„ ν•˜λ € ν•©λ‹ˆλ‹€.

μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ„ λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ λ°°μ—΄ want와 μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ˜ μˆ˜λŸ‰μ„ λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ λ°°μ—΄ number, XYZ λ§ˆνŠΈμ—μ„œ ν• μΈν•˜λŠ” μ œν’ˆμ„ λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ λ°°μ—΄ discountκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, νšŒμ›λ“±λ‘μ‹œ μ •ν˜„μ΄κ°€ μ›ν•˜λŠ” μ œν’ˆμ„ λͺ¨λ‘ 할인 받을 수 μžˆλŠ” νšŒμ›λ“±λ‘ λ‚ μ§œμ˜ 총 일수λ₯Ό return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ‹œμ˜€. κ°€λŠ₯ν•œ 날이 μ—†μœΌλ©΄ 0을 return ν•©λ‹ˆλ‹€.

λ‚΄ μ½”λ“œ

첫번째 풀이

#include <string>
#include <vector>
#include <map>

using namespace std;

int solution(vector<string> want, vector<int> number, vector<string> discount) {
    int answer = 0;
    map<string, int> shopping_list;
    
    // μ‡Όν•‘ 리슀트 μ±„μš°κΈ°
    for(int i = 0; i < want.size(); ++i)
    {
        shopping_list.insert({want[i], number[i]});
    }
    
    // λͺ¨λ‘ 할인 받을 수 μžˆλŠ” λ‚ μ˜ 수 μ°ΎκΈ°
    for(int i = 0; i < discount.size(); ++i)
    {
        map<string, int> copy = shopping_list;
        
        int last_day = i+10;
        if(last_day > discount.size())
            last_day = discount.size();
        
        for(int d = i; d < last_day;  ++d)
        {        
            auto iter = copy.find(discount[d]);
            if(iter != copy.end())
            {   
                --copy[iter->first];
                if(copy[iter->first] <= 0)
                    copy.erase(iter);
            }
        }
        
        if(copy.empty())
            ++answer;    
    }
    
    return answer;
}

λ‘λ²ˆμ§Έ 풀이

첫번째 풀이λ₯Ό λ°”νƒ•μœΌλ‘œ 쑰금 더 쑰건을 μΆ”κ°€ν•΄μ„œ λ°˜λ³΅μ„ μ΅œμ†Œν™”ν•˜μ—¬ μ‹œκ°„μ„ 쑰금 더 쀄인 μ½”λ“œ

#include <string>
#include <vector>
#include <map>

using namespace std;

int solution(vector<string> want, vector<int> number, vector<string> discount) {
    int answer = 0;
    map<string, int> shopping_list;
    int total = 0;
    
    // μ‡Όν•‘ 리슀트(map) μ±„μš°κΈ°
    for(int i = 0; i < want.size(); ++i)
    {
        shopping_list.insert({want[i], number[i]});
        total += number[i];
    }
    
    // 각 할인 행사 날을 μ‹œμž‘μΌλ‘œ μ„€μ •ν•˜μ—¬ 10일 λ™μ•ˆ 물건을 λͺ¨λ‘ μ‚΄ 수 μžˆλŠ”μ§€ κ²€μ‚¬ν•œλ‹€.
    for(int i = 0; i < discount.size(); ++i)
    {
        // μ‡Όν•‘ 리슀트 볡제
        map<string, int> copy = shopping_list;
        
        // λ§ˆμ§€λ§‰ λ‚  계산
        int last_day = i+10;
        if(last_day > discount.size())
            last_day = discount.size();
        
        // 남은 날이 μ‡Όν•‘ 리슀트의 물건의 μˆ˜λ³΄λ‹€ 적을 경우, λͺ¨λ“  물건을 사지 λͺ»ν•˜λ―€λ‘œ
        // μ΄ν›„μ˜ 날듀에 λŒ€ν•΄ 더 이상 검사λ₯Ό μ§„ν–‰ν•˜μ§€ μ•Šκ³  λ„˜μ–΄κ°„λ‹€.
        if(last_day-i < total)
            break;
        
        // 10일간 할인 ν’ˆλͺ© 검사
        for(int d = i; d < last_day;  ++d)
        {
            // μ‚¬κ³ μž ν•˜λŠ” 물건이 μ‡Όν•‘ λ¦¬μŠ€νŠΈμ— μžˆλ‹€λ©΄ mapμ—μ„œ ν•΄λ‹Ή 물건의 개수λ₯Ό 쀄인닀. (0이 되면 λΊ€λ‹€)
            auto iter = copy.find(discount[d]);
            if(iter != copy.end())
            {   
                --copy[iter->first];
                if(copy[iter->first] <= 0)
                    copy.erase(iter);
            }
            
            // μ‡Όν•‘ λ¦¬μŠ€νŠΈμ— 더 이상 물건이 남지 μ•Šμ•˜λ‹€λ©΄ 검사λ₯Ό μ’…λ£Œν•œλ‹€.
            if(copy.empty())
                break;
        }
        
        // μ‡Όν•‘ λ¦¬μŠ€νŠΈκ°€ λΉ„μ—ˆλ‹€λ©΄ λͺ¨λ“  물건을 μ‚΄ 수 μžˆμœΌλ‹ˆ μ •λ‹΅μœΌλ‘œ μΆ”κ°€ν•œλ‹€.
        if(copy.empty())
            ++answer;    
    }
    
    return answer;
}

ν…ŒμΌ€ 10번과 8λ²ˆμ„ λΉ„κ΅ν•˜λ©΄ μ‹€ν–‰ μ‹œκ°„μ΄ μ€€ 것을 확인할 수 μžˆλ‹€.

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'πŸ–₯️ Study Note > Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 2xn 타일링(C++)  (0) 2023.08.08
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - λ””νŽœμŠ€ κ²Œμž„(C++)  (0) 2023.08.07
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - 인사고과(C++)  (1) 2023.08.01
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - N-Queen(C++)  (0) 2023.07.31
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - n^2 λ°°μ—΄ 자λ₯΄κΈ°(C++)  (0) 2023.07.28
'πŸ–₯️ Study Note/Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 2xn 타일링(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - λ””νŽœμŠ€ κ²Œμž„(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - 인사고과(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - N-Queen(C++)
Beankong_
Beankong_
μ£Όλ‹ˆμ–΄ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž˜λ¨Έ 곡뢀 기둝
  • Beankong_
    Beankong's Devlog
    Beankong_
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (146)
      • β›… Daily (0)
      • πŸ–₯️ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • 🧭 Devlog (8)
        • μ˜€λ‹΅λ…ΈνŠΈ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • 링크

    • 곡지사항

    • 인기 κΈ€

    • νƒœκ·Έ

      κ·Έλž˜ν”„ 순회
      UnrealEngine5
      unrealengine module
      ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
      κ²Œμž„ ν”„λ‘œκ·Έλž˜λ°
      propertyaccess
      ν”„λ£Œκ·Έλž˜λ¨ΈμŠ€
      ν—¬ν…Œμ΄μ»€
      κ²Œμž„ν”„λ‘œκ·Έλž˜λ°
      μ½”λ”©ν…ŒμŠ€νŠΈ
      cpp
      OnlineSubsystem
      μ΅œλ‹¨ 거리 μ•Œκ³ λ¦¬μ¦˜
      programmers
      unrealengine build system
      μ•Œκ³ λ¦¬μ¦˜
      UnrealEngine
      그리디(greedy)
      κ²Œμž„ 개발
      κ²Œμž„ λͺ¨μž‘
    • 졜근 λŒ“κΈ€

    • 졜근 κΈ€

    • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
    Beankong_
    [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 할인 행사(C++)
    μƒλ‹¨μœΌλ‘œ

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”