서크호
서크호 - 개발 스토리
서크호
전체 방문자
오늘
어제
  • 분류 전체보기 (22)
    • TEAM 알고싶다 (17)
      • 성공 문제 (16)
      • 실패 문제 (1)
    • JavaScript (0)
    • TypeScript (0)
    • Node.js (2)
      • React.js (0)
      • Next.js (0)
      • NestJS (2)
    • Baekjoon (Node.Js) (1)
    • Error Box (1)
    • MySQL (1)
    • JAVA (0)
    • Andriod (0)
    • Spring Boot (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • Nest Typeormm
  • NestJs login
  • nodejs
  • 적록색약 nodejs
  • Nestjs
  • Nest mysql
  • NestJs session
  • 적록색약 javascript
  • javascript
  • 백준
  • NestJS ValidationPipe
  • NestJs PassPort
  • 10026 node
  • 10026
  • NestJs Strategy
  • 백준 적록색약
  • Nest DB

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
서크호
TEAM 알고싶다/성공 문제

[프로그래머스] JavaScript - 캐시

TEAM 알고싶다/성공 문제

[프로그래머스] JavaScript - 캐시

2022. 6. 17. 00:52

📄 문제

- 캐시 알고리즘 LRU(Least Recently Used)를 사용해 캐시크기, 도시이름 배열이 주어지면 실행시간을 return

 

- 조건 

  • cache hit일 경우 실행시간은 1이다.
  • cache miss일 경우 실행시간은 5이다.

- 주의점

  • 도시이름이 대소문자가 섞여있고, 스펠링만 맞으면 같은 도시다.

문제가 너무 길어서 조건과 입출력 예제


📝 나의 풀이

function solution(cacheSize, cities) {
  let answer = 0;
  let box = [];
  let newArr = cities.map((item) => item.toLowerCase());
  newArr.forEach((city) => {
    if (!box.includes(city)) {
      box.push(city);
      answer += 5;
      if (box.length > cacheSize) {
        box.shift();
      }
    } else {
      answer++;
      let target = box.indexOf(city);
      box.splice(target, 1);
      box.push(city);
    }
  });
  return answer;
}

⌨ 접근법

1. 캐시사이즈 = 배열안의 요소 개수 이므로 사이즈를 체크할 box 배열 생성

2. 배열안의 요소 체크를 위해 요소들을 모두 소문자로 바꿔서 새로운 배열을 만든다. (newArr)

3. 새로운 배열로 반복문을 돌린다.

3-1. 만약 box 안에 검색하려는 요소가 없으면 그 요소를 push, answer를 5 올려준다.

3-2. 만약 박스의 길이 (캐시사이즈) 이상이면 가장 맨 앞의 요소를 없앤다.

3-3. 만약 box 안에 검색하려는 요소가 있으면 그 요소를 찾아서 없애고, 맨 뒤에 그 요소를 push,
       answer++ 해준다.

4. 3의 반복문이 모두 끝난 후 만들어진 answer를 return 한다.


📖 배운 점 

1. LRU 알고리즘

  • Cache 알고리즘 중에 하나인 알고리즘!
  • 가장 최근에 사용된 적이 없는 캐시의 메모리부터 대체하며 새로운 데이터로 갱신시켜준다.
  • 그린이 문제를 풀고 적어놓은 힌트 덕분에 이 문제를 수월하게 풀 수 있었던 것 같다.

😂 아쉬운 점

- 이번 문제를 풀면서 느낀게 문제도 문제지만 알고리즘 자체에 대한 공부를 개념부터 하면 좋을 것 같다.

- 개념을 익히고, 직접 만들어보고 어떨 때 사용하고 이런 것들을 정리하다 보면 내 코드의 수준이 높아질 것 같다.

- 책 사러 가야겠다!


📚 문제 링크

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

 

코딩테스트 연습 - [1차] 캐시

3 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"] 50 3 ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"] 21 2 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Ro

programmers.co.kr

 

저작자표시 (새창열림)

'TEAM 알고싶다 > 성공 문제' 카테고리의 다른 글

[Baekjoon (Node.js)] 2606번 바이러스  (0) 2022.07.05
[Baekjoon (Node.js)] 2164번 카드2  (0) 2022.06.22
[LeetCode] 152. Maximum Product Subarray(최대로 생성된 부분 배열?)  (0) 2022.06.14
[LeetCode] 41. First Missing Positive (처음 누락된 양수?)  (0) 2022.06.13
[프로그래머스] JavaScript - 오픈채팅방  (0) 2022.06.09
    'TEAM 알고싶다/성공 문제' 카테고리의 다른 글
    • [Baekjoon (Node.js)] 2606번 바이러스
    • [Baekjoon (Node.js)] 2164번 카드2
    • [LeetCode] 152. Maximum Product Subarray(최대로 생성된 부분 배열?)
    • [LeetCode] 41. First Missing Positive (처음 누락된 양수?)
    서크호
    서크호
    팀 스터디 및 개인 개발 관련 블로그 입니다!

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.