2020 카카오 블라인드 코딩테스트 - 문자열 압축 (feat. Java)

2020. 5. 19. 15:44· 알고리즘/연습문제
목차
  1. 문제 정보는 아래 링크를 확인해주세요!
  2. [문자열 압축]
반응형

문제 정보는 아래 링크를 확인해주세요!

[문자열 압축]

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자

programmers.co.kr

문제 접근 방법

  • 압축 가능한 길이를 1부터 문자열의 절반까지 정해주고,
  • 문자열의 제일 왼쪽부터 압축 가능 길이만큼을 잘라준 문자열이 오른쪽 같은 길이만큼 잘라준 문자열과 같은지 비교
  • 문자열이 같으면 압축 갯수를 더해주고,
  • 다르면 압축 갯수와 현재 압축된 왼쪽 문자열을 합쳐서 전체 문자열에 더해주고
  • 오른쪽 문자열을 왼쪽 문자열에 넣고  재탐색한다.
  • 압축 가능 길이 n에 대하여 문자열 압축을 끝내면, 해당 압축 문자열의 길이를 최솟값과 비교한다.
  • 이 과정을 1부터 n까지 반복한다.

[소스 코드]

package algorithm.kakao;

import java.util.*;

/*
* 2020 카카오 블라인드 코딩테스트
* 문자열 압축
* */
public class Pro60057 {

    public int solution(String s) {
        //최대 압축이 가능한 길이는 절반이다.
        int len = s.length()%2 == 0 ? s.length()/2 : (s.length()/2)+1;

        int min = Integer.MAX_VALUE;

        //압축 길이
        for (int i = 1; i <= len; i++) {

            StringBuilder sb = new StringBuilder("");//압축된 문자열을 저장할 객체

            int left	= 0;//왼쪽 구간
            int right 	= left+i;//오른쪽 구간
            int cnt 	= 1;//현재 중복 문자열이 몇 개인지

            String s1 = s.substring(left,left+i);//left부터 i까지의 문자열
            sb.append(s1);//압축 문자열에 추가

            while(right+i <= s.length()) {//오른쪽 구간 검사 값이 전체 문자열의 길이보다 작거나 같아야한다.

                String s2 = s.substring(right,right+i);//오른쪽 구간에 대한 문자열 생성
                if (!s1.equals(s2)) {//왼쪽과 오른쪽이 같지 않을 때,

                    left = right;//왼쪽에 오른쪽을 재구성
                    s1 = s2;

                    if (cnt > 1) sb.insert(sb.length()-i, cnt);//중복된 값이 있다면, 현재 문자열 앞에 갯수를 추가

                    sb.append(s1);//압축 문자열에 현재까지 만들어준 문자열을 저장

                    cnt = 1;//중복값을 다시 1로 만들어준다.
                } else {//왼쪽과 오른쪽이 같을 때,
                    cnt++;//중복값을 더해준다.
                }

                right += i;//오른쪽을 i만큼 증가

            }

            //마지막 오른쪽 값을 압축 문자열에 추가해주는 과정
            if (cnt > 1) sb.insert(sb.length()-i, cnt);

            sb.append(s.substring(right));
            min = Math.min(sb.length(), min);//현재 만들어준 문자열 길이와 최솟값을 비교
        }

        return min;
    }
}

 

[정확성 테스트]

 

반응형
LIST

'알고리즘 > 연습문제' 카테고리의 다른 글

2020 카카오 블라인드 코딩테스트 - 자물쇠와 열쇠 (feat. Java)  (0) 2020.05.19
2020 카카오 블라인드 코딩테스트 - 괄호 변환 (feat. Java)  (0) 2020.05.19
2019 카카오 블라인드 코딩테스트 - 블록 게임 (feat. Java)  (1) 2020.05.17
2019 카카오 블라인드 코딩테스트 - 매칭 점수 (fea. Java)  (0) 2020.05.16
2019 카카오 블라인드 코딩테스트 - 길 찾기 게임 (feat. Java)  (0) 2020.05.16
  1. 문제 정보는 아래 링크를 확인해주세요!
  2. [문자열 압축]
'알고리즘/연습문제' 카테고리의 다른 글
  • 2020 카카오 블라인드 코딩테스트 - 자물쇠와 열쇠 (feat. Java)
  • 2020 카카오 블라인드 코딩테스트 - 괄호 변환 (feat. Java)
  • 2019 카카오 블라인드 코딩테스트 - 블록 게임 (feat. Java)
  • 2019 카카오 블라인드 코딩테스트 - 매칭 점수 (fea. Java)
iron_jin
iron_jin
배운 것에 대한 내 생각을 가지고 정리하자
學而不思則罔(학이불사즉망)배운 것에 대한 내 생각을 가지고 정리하자
iron_jin
學而不思則罔(학이불사즉망)
iron_jin
전체
오늘
어제
  • 전체 (163)
    • 도서 (10)
    • 생각 정리 (0)
    • 후기 모음 (14)
    • 언어 (20)
      • css (1)
      • java (9)
      • Kotlin (0)
      • javascript (0)
      • Solidity (3)
      • Python (3)
      • GO (3)
      • C++ (1)
    • Spring Framework (32)
      • spring (16)
      • JPA (6)
      • Error (4)
      • Settings (4)
    • 알고리즘 (62)
      • 이론 (0)
      • 연습문제 (58)
    • 인프라 (6)
      • 클라우드 (1)
      • 도커 (0)
      • AWS (4)
      • Elastic Search (0)
    • 쿠버네티스 (3)
      • 이론 (0)
      • 실습 (2)
      • 트러블슈팅 (1)
    • Nginx (2)
    • CS (4)
      • 서버 (0)
      • 리눅스 (2)
      • 네트워크 (0)
      • OAuth (2)
    • 형상관리 (3)
      • GIT (3)
    • Open API (3)
      • 카카오 API (1)
      • QGIS (2)
    • 보안 (0)
      • 알고리즘 (0)
    • 공통 (1)
      • 성능 관리 도구 (1)
    • Database (2)
      • MySQL (1)
      • Redis (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 코딩테스트
  • 2020 카카오 블라인드
  • 항해99
  • spring boot
  • ddd
  • 스프링 부트
  • SpringBoot
  • 자바
  • 2018 kakao
  • 2020 kakao
  • Python
  • AWS
  • 프로그래머스
  • spring
  • 백준
  • MySQL
  • Java
  • 에릭 에반스
  • 도메인 주도 개발
  • 2019 kakao
  • JPA
  • 2020 카카오
  • 항해플러스
  • 2019 카카오 블라인드
  • 2019 카카오
  • 스프링
  • Hibernate
  • 2018 카카오 블라인드
  • 카카오 겨울 인턴십

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
iron_jin
2020 카카오 블라인드 코딩테스트 - 문자열 압축 (feat. Java)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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