떵호
seongho'Dev
떵호
전체 방문자
오늘
어제
  • 분류 전체보기 (116)
    • 회고 (2)
    • Algorithm (74)
      • 프로그래머스 (65)
      • 백준(BOJ) (2)
      • Note (7)
    • 기술독서 (25)
      • Clean Code (11)
      • 자바의 정석 (8)
      • 대규모 시스템 설계 기초 (6)
    • Computer Science (1)
      • Operating System (1)
    • Typescript (1)
    • JAVA (0)
    • Spring (6)
      • JPA (6)
    • AWS (2)
    • Git (2)
    • Etc (2)

블로그 메뉴

  • github

티스토리

태그

  • 자바의 정석
  • 클린코드
  • 프로그래머스
  • JPA
  • 알고리즘
  • 완전탐색
  • 코딩테스트 준비
  • 구현
  • Clean Code
  • 카카오 코테
hELLO · Designed By 정상우.
떵호

seongho'Dev

[Java] 프로그래머스 Lv2 - [3차] 압축 (2018 KAKAO BLIND RECRUITMENT)
Algorithm/프로그래머스

[Java] 프로그래머스 Lv2 - [3차] 압축 (2018 KAKAO BLIND RECRUITMENT)

2022. 6. 9. 16:03
728x90

🔗 문제링크

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr

📂 분류

구현

💡 풀이

문제 설명에 나와 있는 LZW 압축 과정을 구현하면 되는 문제이다.

 

접근 방식

  •  A ~ Z까지 HashMap을 이용해 초기화를 한다.
  • 현재 단어 w와 다음 단어 c를 받는다.
  • w + c가 map에 저장되어있는지 확인하고, 저장되어있다면 continue로 건너뛰어 위 과정을 다시 진행한다.
  • w + c가 없다면, w 값을 출력하고 map에 저장한 다음 w를 초기화시켜준다.

💻 코드

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Solution {

    private final Map<String, Integer> map = new HashMap<>();
    private int index = 1;

    public int[] solution(String msg) {
        int[] answer;
        List<Integer> output = new ArrayList<>();

        init();
        StringBuilder w = new StringBuilder();
        for (int i = 0; i < msg.length(); i++) {
            w.append(String.valueOf(msg.charAt(i)));
            String wc = "";
            if (i + 1 < msg.length()) {
               String c = String.valueOf(msg.charAt(i + 1));
                wc = w + c;
                if (map.containsKey(wc)) {
                    continue;
                }
            }
            output.add(map.get(w.toString()));
            map.put(wc, index++);
            w = new StringBuilder();
        }
        answer = output.stream().mapToInt(i -> i).toArray();

        return answer;
    }

    private void init() {
        char start = 'A';
        for (; index <= 26; index += 1) {
            map.put(String.valueOf(start++), index);
        }
    }
}
728x90
저작자표시 (새창열림)

'Algorithm > 프로그래머스' 카테고리의 다른 글

[Python] 프로그래머스 Lv2 - [3차] 파일명 정렬 (2018 KAKAO BLIND RECRUITMENT)  (0) 2022.06.14
[Python] 프로그래머스 Lv2 - 양궁대회 (2022 KAKAO BLIND RECRUITMENT)  (0) 2022.06.10
[Java] 프로그래머스 Lv2 - 3 x n 타일링  (0) 2022.06.02
[Java] 프로그래머스 Lv2 - 2 x n 타일링  (0) 2022.05.31
[Java] 프로그래머스 Lv2 - 가장 큰 정사각형 찾기  (0) 2022.05.30
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • [Python] 프로그래머스 Lv2 - [3차] 파일명 정렬 (2018 KAKAO BLIND RECRUITMENT)
    • [Python] 프로그래머스 Lv2 - 양궁대회 (2022 KAKAO BLIND RECRUITMENT)
    • [Java] 프로그래머스 Lv2 - 3 x n 타일링
    • [Java] 프로그래머스 Lv2 - 2 x n 타일링
    떵호
    떵호

    티스토리툴바