• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

37번 LRU

21.01.11 21:26 작성 조회수 200

0

37번 LRU
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>

using namespace std;

int main(int argc, char** argv) 
{
int s,n, wNum, hit = -1, tmp, usedSize = 0;
cin >> s >> n;
vector<int> v(s);

cout << "s : " <<s << " " << "n : " << n << "\n";
for(int t = 0; t < n; t++)
{
cin >> wNum;
for(int i = 0; i < v.size(); i++)
{
if(v[i] == wNum)
{
hit = i;
break; 
}
}

//hit일때 
if(hit != -1)
{
tmp = v[hit];
for(int i = hit - 1; i>=0; i--)
{
v[i+1] = v[i];
}
}
else
{
for(int i = s-1; i>=0; i--)
{
v[i+1] = v[i];
}
}

v[0] = wNum;
hit = -1;
}
        for(int i = 0; i < s; i++)
cout << v[i] << " ";
}

제가 이 문제를 이렇게 풀었는데 이상하게 s값 (캐시 메모리의  크기) 가 10이 넘어가면 안되네요..ㅠㅠ 

10보다 작으면 정상적으로 되는데.. 그래서 체점 해보면 1번2번은 맞는데 뒤에꺼는 틀리다고 하네요. 혹시 어떤게 문제인지 아시나요??..아무리 찾아도 못찾겠어요..ㅠㅠ

답변 1

답변을 작성해보세요.

0

안녕하세요^^

C언어는 특성상 index out of range 에러를 알려주지 않습니다. 프로그래머 스스로 조심해야 합니다.

for(int i = s-1; i>=0; i--)
{
v[i+1] = v[i];
}

여기서 에러고 나고 있는 상황입니다. i=s-2로 하면 될 것 같습니다.

다음부터는 들여쓰기가 되어 보기 편하게 {;}버튼을 사용하여 올려주시면 감사하겠습니다.