못풀었음.

https://programmers.co.kr/learn/courses/30/lessons/17680

답 풀이

#include <string>
#include <vector>
#include <deque>
using namespace std;

int solution(int cacheSize, vector<string> cities) {
    int answer = 0;
    deque<string> dTemp;
    for (int i = 0; i < cities.size(); i++)
    {
        string sTemp = cities[i];
        for (int j = 0; j < sTemp.size(); j++)
        {
            sTemp[j] = tolower(sTemp[j]);//일단 소문자로 전부 변환한다.
        }

        int flag(0);
        int order(0);
        for (int j = 0; j < dTemp.size(); j++, order++)
        {
            if (sTemp == dTemp[j])
            {
                flag = 1;
                break;
            }
        }

     
        if (flag == 1)//이때 hit 인 경우
        {
            dTemp.erase(dTemp.begin() + order);
            dTemp.push_back(sTemp);
            answer += 1;
        }
        else//이때 miss 경우
        {
            if (dTemp.size() >= cacheSize)
            {
                dTemp.pop_front();
            }
            dTemp.push_back(sTemp);
      
            answer += 5;
        }

    }


    return answer;
}

버그유발

       else//이때 miss 경우
        {
            if (dTemp.size() >= cacheSize)
            {
                dTemp.pop_front();
            }
            dTemp.push_back(sTemp);
      
            answer += 5;
        }

이런경우 size() = 0일때 pop 하는경우 core dump로 버그잡을수가 없게됨.
이런 CPU문제에 설명이 불충분해서 다른사람 풀이 참고했음.
1. 프로세스 max탑재가능한 수 정해놓고 max 넘어서면 pop_front
2. 중복 프로세스 들어오면 push_Back하고(앞에 deque설정 해놓고 덱안에 있는지 탐색한다), 기존에 있던거 erase

profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글