-
캐시알고리즘/Level 2 2022. 12. 9. 21:30
https://school.programmers.co.kr/learn/courses/30/lessons/17680
[프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr](https://school.programmers.co.kr/learn/courses/30/lessons/17680)
접근방법
- 캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용한다.
가장 처음 들어온 것이 먼저 나가는데 이러한 구조는 선형 큐의 방식을 떠올리면 된다.
function solution(num, arr) { const chach = Array.from({ length: num }, () => 0); let result = 0; arr.forEach((value) => {}); return result; }
주어진 길이만큼 0으로 이루어진 배열을 만든 뒤 도시의 이름이 든 배열을 돌면서 진행해보고자 한다.
따져야 하는 조건은 아래와 같다.
- 도시의 이름을 대문자 혹은 소문자로 통일시킨다.
- 동일한 도시의 이름이 있다면 제일 첫번째로 이동시키고 1을 증가한다.
- 동일한 도시가 없다면 맨앞에다가 넣어준다.
그럼 위의 조건을 생각하면서 코드를 작성하였다.
function solution(num, arr) { const chach = Array.from({ length: num }, () => 0); let result = 0; arr.forEach((value) => { let city = value.toUpperCase(); let pos = chach.indexOf(city); if(pos!==-1){ for(let i=pos; i>=0; i--){ chach[i] = chach[i-1]; } chach[0] = city; result+=1; }else{ for(let i=num-1; i>=0; i--){ chach[i] = chach[i-1]; } chach[0] = city; result+=5; } }); return result; }
코드는 정렬을 사용하여 구현하였다.
만약 chach배열에 똑같은 도시가 있다면 배열 속 인덱스를 pos가 갖게 된다.
그리고 해당 인덱스부터 for문을 시작하여 한칸씩 뒤로 밀고, 기존에 존재했던 도시를 처음에 넣어주면 된다. 그후 값을 1증가시켜줘야 한다.만약 chach배열에 똑같은 도시가 없다면 배열의 길이만큼 for문을 돌려주면 돤다. 여기에서는 값을 5증가시켜줘야 한다.
'알고리즘 > Level 2' 카테고리의 다른 글
[프로그래머스] - 다리를 지나는 트럭 (0) 2023.03.28 [프로그래머스] - [3차] n진수 게임 (0) 2023.03.16 [프로그래머스] - 게임 맵 최단거리 (0) 2023.03.03 [프로그래머스] - 올바른 괄호 (0) 2023.02.09 [프로그래머스]-호텔 대실 (0) 2023.02.03