[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - μΊμ‹œ(C++)

2023. 7. 20. 12:41Β·πŸ–₯️ Study Note/Coding Test

문제 μ„€λͺ…

μ§€λ„κ°œλ°œνŒ€μ—μ„œ κ·Όλ¬΄ν•˜λŠ” μ œμ΄μ§€λŠ” μ§€λ„μ—μ„œ λ„μ‹œ 이름을 κ²€μƒ‰ν•˜λ©΄ ν•΄λ‹Ή λ„μ‹œμ™€ κ΄€λ ¨λœ λ§›μ§‘ κ²Œμ‹œλ¬Όλ“€μ„ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 읽어 λ³΄μ—¬μ£ΌλŠ” μ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•˜κ³  μžˆλ‹€.

이 ν”„λ‘œκ·Έλž¨μ˜ ν…ŒμŠ€νŒ… 업무λ₯Ό λ‹΄λ‹Ήν•˜κ³  μžˆλŠ” μ–΄ν”ΌμΉ˜λŠ” μ„œλΉ„μŠ€λ₯Ό μ˜€ν”ˆν•˜κΈ° μ „ 각 λ‘œμ§μ— λŒ€ν•œ μ„±λŠ₯ 츑정을 μˆ˜ν–‰ν•˜μ˜€λŠ”λ°, μ œμ΄μ§€κ°€ μž‘μ„±ν•œ λΆ€λΆ„ 쀑 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ κ²Œμ‹œλ¬Όμ„ κ°€μ Έμ˜€λŠ” λΆ€λΆ„μ˜ μ‹€ν–‰μ‹œκ°„μ΄ λ„ˆλ¬΄ 였래 κ±Έλ¦°λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

μ–΄ν”ΌμΉ˜λŠ” μ œμ΄μ§€μ—κ²Œ ν•΄λ‹Ή λ‘œμ§μ„ κ°œμ„ ν•˜λΌκ³  λ‹¦λ‹¬ν•˜κΈ° μ‹œμž‘ν•˜μ˜€κ³ , μ œμ΄μ§€λŠ” DB μΊμ‹œλ₯Ό μ μš©ν•˜μ—¬ μ„±λŠ₯ κ°œμ„ μ„ μ‹œλ„ν•˜κ³  μžˆμ§€λ§Œ μΊμ‹œ 크기λ₯Ό μ–Όλ§ˆλ‘œ ν•΄μ•Ό νš¨μœ¨μ μΈμ§€ λͺ°λΌ λ‚œκ°ν•œ 상황이닀.

μ–΄ν”ΌμΉ˜μ—κ²Œ μ‹œλ‹¬λ¦¬λŠ” μ œμ΄μ§€λ₯Ό 도와, DB μΊμ‹œλ₯Ό μ μš©ν•  λ•Œ μΊμ‹œ 크기에 λ”°λ₯Έ μ‹€ν–‰μ‹œκ°„ μΈ‘μ • ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯ ν˜•μ‹

  • μΊμ‹œ 크기(cacheSize)와 λ„μ‹œμ΄λ¦„ λ°°μ—΄(cities)을 μž…λ ₯λ°›λŠ”λ‹€.
  • cacheSizeλŠ” μ •μˆ˜μ΄λ©°, λ²”μœ„λŠ” 0 ≦ cacheSize β‰¦ 30 이닀.
  • citiesλŠ” λ„μ‹œ μ΄λ¦„μœΌλ‘œ 이뀄진 λ¬Έμžμ—΄ λ°°μ—΄λ‘œ, μ΅œλŒ€ λ„μ‹œ μˆ˜λŠ” 100,000κ°œμ΄λ‹€.
  • 각 λ„μ‹œ 이름은 곡백, 숫자, 특수문자 등이 μ—†λŠ” 영문자둜 κ΅¬μ„±λ˜λ©°, λŒ€μ†Œλ¬Έμž ꡬ뢄을 ν•˜μ§€ μ•ŠλŠ”λ‹€. λ„μ‹œ 이름은 μ΅œλŒ€ 20자둜 이루어져 μžˆλ‹€.

좜λ ₯ ν˜•μ‹

  • μž…λ ₯된 λ„μ‹œμ΄λ¦„ 배열을 μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•  λ•Œ, "총 μ‹€ν–‰μ‹œκ°„"을 좜λ ₯ν•œλ‹€.

쑰건

  • μΊμ‹œ ꡐ체 μ•Œκ³ λ¦¬μ¦˜μ€ LRU(Least Recently Used)λ₯Ό μ‚¬μš©ν•œλ‹€.
  • cache hit일 경우 μ‹€ν–‰μ‹œκ°„μ€ 1이닀.
  • cache miss일 경우 μ‹€ν–‰μ‹œκ°„μ€ 5이닀.

λ‚΄ 풀이

μΊμ‹œλ₯Ό queue둜 κ΅¬ν˜„ν•΄μ„œ ν’€μ—ˆλ‹€.

μ£Όμ˜ν•  점은 μΊμ‹œλ₯Ό μˆœνšŒν•˜λ©΄μ„œ λ„μ‹œ 이름을 찾을 λ•Œ, μΊμ‹œ 크기에 변동이 μžˆμ„ 수 있기 λ•Œλ¬Έμ— μΊμ‹œ 크기λ₯Ό 미리 μ €μž₯ν•œ λ‹€μŒ for문을 λŒμ•„μ•Όν•œλ‹€λŠ” 것이닀. 이걸 κΉœλΉ‘ν•˜λ‹€λ‹ˆγ…œγ…œ

#include <string>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

int solution(int cacheSize, vector<string> cities) {
    int answer = 0;
    
    queue<string> cache;
    
    // μΊμ‹œ 크기가 0 μΌλ•Œ
    if(cacheSize == 0)
    {
        answer = cities.size() * 5;
        return answer;
    }
        
    for(int i = 0; i < cities.size(); i++)
    {
        // μ†Œλ¬Έμžλ‘œ μ „ν™˜
        string city;
        city.resize(cities[i].size());
        transform(cities[i].begin(), cities[i].end(), city.begin(), ::tolower); 
        
        // cacheκ°€ λΉ„μ–΄μžˆμ„ 경우
        if(cache.empty())   
        {   
            cache.push(city);
            answer += 5;
            continue;
        }
        
        // cache에 ν˜„μž¬ λ„μ‹œ 이름이 μžˆλŠ”μ§€ μ°ΎλŠ”λ‹€
        bool find = false;
        int size = cache.size();
        for(int s = 0; s < size; ++s)
        {
            string cur = cache.front();
            cache.pop();
            
            // λ„μ‹œ 이름이 μžˆλ‹€λ©΄ μΊμ‹œ 적쀑
            if(cur == city)
            {
                find = true;
                answer += 1;
            }
            else
            {   
                cache.push(cur);
            }
        }
        
        cache.push(city);
        
        // λ„μ‹œ 이름이 없을 경우 μΊμ‹œ 미슀
        if(!find)
        {
            answer += 5;
            
            if(cache.size() > cacheSize)
            {
                cache.pop();   
            }      
        }
    }
    
    return answer;
}

 

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

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

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 연속 λΆ€λΆ„ μˆ˜μ—΄ ν•©μ˜ 개수(C++)  (0) 2023.07.23
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 -ν•˜λ…Έμ΄μ˜ 탑(C++)  (2) 2023.07.22
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - νŠœν”Œ(C++)  (0) 2023.07.18
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 점 찍기(C++)  (0) 2023.07.17
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 124 λ‚˜λΌμ˜ 숫자(C++)  (0) 2023.07.14
'πŸ–₯️ Study Note/Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 연속 λΆ€λΆ„ μˆ˜μ—΄ ν•©μ˜ 개수(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 -ν•˜λ…Έμ΄μ˜ 탑(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - νŠœν”Œ(C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 점 찍기(C++)
Beankong_
Beankong_
μ£Όλ‹ˆμ–΄ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž˜λ¨Έ 곡뢀 기둝
  • Beankong_
    Beankong's Devlog
    Beankong_
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (141)
      • β›… Daily (0)
      • πŸ–₯️ Study Note (135)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • 🧭 Devlog (6)
        • μ˜€λ‹΅λ…ΈνŠΈ (2)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
Beankong_
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - μΊμ‹œ(C++)
μƒλ‹¨μœΌλ‘œ

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