옝옹
냠
옝옹
전체 방문자
오늘
어제
  • 분류 전체보기 (84)
    • [LG유플러스]유레카 SW (5)
    • React (20)
    • JS (17)
    • TypeScript (5)
    • CSS & HTML (1)
    • 알고리즘 (11)
    • JAVA (20)
    • GIT (1)
    • 자격증 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 화살표함수
  • 리액트
  • map
  • reduce
  • 인스턴스멤버
  • 노마드코더
  • join() 메서드
  • useEffect
  • indexOf()
  • useRef
  • useMemo
  • 템플릿리터럴
  • template literal
  • switch문
  • 함수선언
  • join()
  • TypeScript
  • JavaScript
  • fillter
  • sort() 메서드
  • java.util패키지
  • useState
  • While문
  • 코드스플리팅
  • 자바스트립트
  • java.lang패키지
  • Node.js
  • js
  • match()
  • 자바스크립트
  • reverse() 메서드
  • 접근제한자
  • 혼자공부하는자바
  • break문
  • 리액트를다루는기술
  • 정적멤버
  • 자바
  • java
  • 혼자 공부하는 자바
  • 변수선언
  • 타입변환
  • 타입스크립트
  • 백준
  • ==
  • map() 함수
  • toFixed
  • continue문
  • do-while문
  • 기본api클래스
  • useCallback

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
옝옹

냠

[알고리즘]프로그래머스 - 2018 KAKAO BLIND RECRUITMENT [3차] 압축
알고리즘

[알고리즘]프로그래머스 - 2018 KAKAO BLIND RECRUITMENT [3차] 압축

2024. 10. 10. 19:17

문제 설명

 

제한사항

  • 입력으로 영문 대문자로만 이뤄진 문자열 msg가 주어진다. msg의 길이는 1글자 이상, 1000글자 이하이다.
  • 주어진 문자열을 압축한 후의 사전 색인 번호를 배열로 출력하라.

입출력 예

 

내가 푼 코드

function solution(msg) {
  var answer = [];
  const index = [];

  for (let i = 0; i < 26; i++) {
    index.push(String.fromCharCode(i + 65));
  }

  for (let i = 0; i < msg.length; i++) {
    let [w, c] = [msg[i], msg[i + 1]];

    while (index.includes(w)) {
      let message = w + c;
      if (index.includes(message)) {
        w += c;
        c = msg[++i + 1];
      } else {
        answer.push(index.indexOf(w) + 1);
        index.push(w + c);
        break;
      }
    }
  }

  return answer;
}

 

QnA

1. 알파벳 배열을 손쉽게 짤 수 있는 방법은 없는가?

 

기존 내 코드

  const index = [];

  for (let i = 0; i < 26; i++) {
    index.push(String.fromCharCode(i + 65));
  }

 

간결한 방법

const index = Array.from({ length: 26 }, (v, i) => String.fromCharCode(i + 65));
  • 시간복잡도는 동일하나, 보기에 좀 더 간결하다.
  • new Array() 는 빈 배열 또는 특정 길이의 배열을 만드는 데 사용되고
  • Array.from() 은 매핑함수를 적용하는 옵션과 함께 반복 가능하거나 배열과 유사한 객체에서 배열을 만드는데 사용

 

내가 작성한 코드에서 좀 더 시간 복잡도 줄이는 방법은?

내가 작성한 코드의 시간 복잡도 : O(n(=msg.length) * m(동적으로 증가하는 index))

function solution(msg) {
    let answer = [];
    let dic = {};
    
 	for (let i = 0; i < 26; i++) {
        dic[String.fromCharCode(i + 65)] = i + 1;
    }
    
    let currentWord = '';
    let nextIndex = 27; // A-Z를 넘어서는 색인
    
    for (let i = 0; i < msg.length; i++) {
        currentWord += msg[i];
 
        if (!(currentWord in dic)) {
            answer.push(dic[currentWord.slice(0, -1)]); // 이전 단어의 색인을 결과에 추가
            dic[currentWord] = nextIndex++;             // 새 단어를 사전에 추가
            currentWord = msg[i];                       // currentWord 초기화
        }
    }
    
    if (currentWord) answer.push(dic[currentWord]);
    
    return answer;
}

 

  • 해시 맵에서의 검색/추가는 평균적으로 O(1)임을 이용한 코드
  • 시간 복잡도 O(n)

 

저작자표시 비영리 변경금지 (새창열림)

'알고리즘' 카테고리의 다른 글

[알고리즘] 프로그래머스 - 롤케이크 자르기  (2) 2024.10.10
[알고리즘] 백준 11286 절대값 힙 node.js (heap)  (1) 2024.06.26
[알고리즘]프로그래머스 - N으로 표현 <동적계획법(DP)>  (0) 2024.03.04
[알고리즘] 백준 13904 과제 node.js (Greedy)  (2) 2024.02.23
[알고리즘] 탐욕법(Greedy)  (0) 2024.02.06
    '알고리즘' 카테고리의 다른 글
    • [알고리즘] 프로그래머스 - 롤케이크 자르기
    • [알고리즘] 백준 11286 절대값 힙 node.js (heap)
    • [알고리즘]프로그래머스 - N으로 표현 <동적계획법(DP)>
    • [알고리즘] 백준 13904 과제 node.js (Greedy)
    옝옹
    옝옹

    티스토리툴바