프로그래밍공부/알고리즘

코딩테스트 - 문자열 압축

2020. 8. 4. 11:25
목차
  1. -끝-

프로그래머스에 있는 카카오톡 코딩테스트 문제를 풀어봤다.

 

문제는 아래와 같다.

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

 

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

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

programmers.co.kr

요점은 앞에서 부터 문자열을 잘잘라서 압축하면 된다.

 

아래는 내가 짠 코드이다.

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int solution(String s) {
        // 1부터 전체길이/2 까지 압축해보아야함.
        Queue<String> que=new LinkedList<String>();
        int length = s.length();
        int answer = length;
        int start=0;
        int last=0;
        // 1, 2, ... 전체길이/2 순으로 잘라서 압축해보자.
        // substring함수를 이용
        // 잘라서 큐에 넣어준다음 하나씩 빼주면서 압축된 문자열을 만들어준다.
        // i는 자를 길이수
        for(int i = 1;i<length/2+1;++i){
            for(int index=0;index<length;index+=i){
                //시작과 끝인덱스를 잘 정해주어야 예외가 발생하지 않는다
                start = index;
                if(index>=length){
                    start=length-1;
                }
                last = index + i;
                if(index+i>length)
                    last=length;
                que.add(s.substring(start,last));
            }
            answer=getAnswer(answer,que);
        }
        return answer;
    }
    
    public String getStr(int count,String str){
        String pre="";
        if(count == 1)
            pre="";
        else
            pre=String.valueOf(count);
        return pre+str;
    }
    
    public int getAnswer(int answer, Queue<String> que){
    //큐에서 하나씩 빼주면서 압축된 문자열을 만들어주는것.
        String answerStr = "";
        String temp = que.poll();
        int length = 0;
        int count = 1;
        while(!que.isEmpty()){
            if(temp.equals(que.peek())){
                count++;
                que.poll();
            }else{
                answerStr+=getStr(count,temp);
                temp=que.poll();
                count = 1;
            }
        }
        answerStr+=getStr(count,temp);
        length = answerStr.length();
        if(answer>length){
            return length;
        }else{
            return answer;
        }
    }
    
}

 

이중 for문이라 시간이 조금 느리다 ㅠㅠ

 

좀더 좋은방법을 찾아봐야한다.

 

아래 두 메소드는 코드가 너무길고 복잡하며 따로 분리해 낸 부분이다.

 

-끝-

'프로그래밍공부 > 알고리즘' 카테고리의 다른 글

코딩테스트 - 정수삼각형  (0) 2020.08.06
코딩테스트 - 파일명 정렬  (0) 2020.08.04
카카오톡 코딩테스트 - 다트게임  (0) 2020.08.04
코딩테스트 - K번째수  (0) 2020.08.03
코딩테스트 - 알고리즘 공부 - 베스트앨범  (2) 2020.07.28
  1. -끝-
'프로그래밍공부/알고리즘' 카테고리의 다른 글
  • 코딩테스트 - 정수삼각형
  • 코딩테스트 - 파일명 정렬
  • 카카오톡 코딩테스트 - 다트게임
  • 코딩테스트 - K번째수
중랑구보안관
중랑구보안관
이것저것 기록하기 위한 블로그 ^-^
중랑구보안관
중랑구보안관의 기록블로그
중랑구보안관
전체
오늘
어제
  • 분류 전체보기 (25)
    • 일상 (3)
    • 취미 (2)
      • 게임 (0)
      • 만화 (2)
    • 프로그래밍공부 (19)
      • 파이썬 (6)
      • 자바 (1)
      • 알고리즘 (11)
      • 엘릭서 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩테스트
  • 인터넷보안
  • 동적계획법
  • 토이프로젝트
  • 카카오톡
  • 고려사이버대학교
  • 프로그래머스
  • 카카오톡코딩테스트
  • 저장용
  • 자바
  • python
  • 친구와캠핑
  • 정보보안
  • 코로나
  • 파이썬
  • 장고프로젝트
  • lifcycle
  • 프로그래밍공부
  • 공공데이터API
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.
중랑구보안관
코딩테스트 - 문자열 압축
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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