[Programmers] 문자열 압축

2022. 2. 23. 23:58· Algorithm
반응형

- 알고리즘 분류 : 구현

- 사용 언어 : JAVA

- 문제 요점

  1. 문자열이 주어지면, 가장 짧게 압축한 문자열의 길이를 반환하는 문제
  2. 압축할 때 문자 1개 or 문자 2개 or 문자 3개 ... 씩 압축할 수 있다.
  3. 문자열을 압축하는 변수를 1로 시작하고 문자열의 길이까지 확인한 후, 가장 짧은 문자열의 길이를 반환하면 된다.

 

소스 설명은 주석을 참고해주세요.

class Solution {
    public int solution(String s) {
        String[] strArr = s.split("");
        
        int min = (int)1e9;
        
        // 문자열을 묶을 갯수를 1부터 점차 증가(문자열의 전체 개수까지)
        for(int num=1; num<=strArr.length; num++){
            String str = "";
            
            String now = "";
            int cnt = 0;
            
            // 문자열 묶을 갯수만큼 문자열을 가져옴
            for(int k=0; k<num; k++){
                now += strArr[k];
            }  
            
            int rest = 0;
            int j=0;
            while(true) {
                // 뒤에 남은 문자의 갯수가 num 보다 작으면 탈출
                if(strArr.length - j < num) {
                    
                    // 남은 문자의 개수 기록해두고
                	rest = strArr.length - j;
                    
                    // 기존에 기록해오던 데이터 str에 넣고
                	if(cnt == 1){
                        str += now;
                    }
                    else{
                        str += (cnt+now);
                    }
                    
                    // 탈출
                	break;
                }
                
                // num 만큼 임시 문자열에 넣기
                String temp = ""; 
                // 현재 위치부터 num뒤로의 문자열을 가져오기
                for(int k=0; k<num; k++){
                    temp += strArr[j+k];
                }  
                
                // 같으면 카운트
                if(now.equals(temp)){
                    cnt++;
                }
                
                // 다르면 str 문자열에 넣기
                else{
                	// 카운트가 1이면 숫자 안넣음
                    if(cnt == 1){
                        str += now;
                    }
                    
                    // 카운트가 1이 아니면 숫자 넣음
                    else{
                        str += (cnt+now);
                    }
                    
                    // now 문자열 갱신
                    now = temp;
                    
                    // 카운트 1로 초기화
                    cnt = 1;
                }
                // j 증가
                j+=num;
            }
            
            // 작은 것으로 결과값 갱신
            min = Math.min(min, str.length()+rest);
        }
        
        //결과 출력
        return min;
    }
}
반응형

'Algorithm' 카테고리의 다른 글

[Programmers] 자물쇠와 열쇠 (JAVA)  (0) 2022.02.26
[BAEKJOON] 2293번 : 동전 1 (JAVA)  (0) 2022.02.24
[BAEKJOON] 18406번 : 럭키 스트레이트 (JAVA)  (0) 2022.02.23
[이것이 코딩테스트다] 11. 그리디 알고리즘 - 유형별 기출문제 풀이 (JAVA)  (0) 2022.02.23
[BAEKJOON] 9465번 : 스티커 (JAVA)  (0) 2022.02.23
'Algorithm' 카테고리의 다른 글
  • [Programmers] 자물쇠와 열쇠 (JAVA)
  • [BAEKJOON] 2293번 : 동전 1 (JAVA)
  • [BAEKJOON] 18406번 : 럭키 스트레이트 (JAVA)
  • [이것이 코딩테스트다] 11. 그리디 알고리즘 - 유형별 기출문제 풀이 (JAVA)
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • java 8
  • 더 자바 Java 8
  • Effective Java
  • 자기개발
  • 자기공부
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • 코틀린
  • junit5
  • 자기 공부
  • 자바 개발자를 위한 코틀린 입문
  • 알고리즘공부
  • MongoDB 기초부터 실무까지
  • 자바 테스팅 프레임워크
  • 자기 개발
  • 코테공부
  • MongoDB 공부
  • JPA 공부
  • JPA
  • Oracle
  • 자바공부
  • 전산회계 2급 준비
  • 프로젝트로 배우는 Vue.js 3
  • 알고리즘 공부
  • Java to Kotlin
  • 이펙티브 자바
  • vue3 공부
  • MongoDB with Node.js
  • 코테 공부
  • 자바 공부
  • 이펙티브자바

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[Programmers] 문자열 압축
상단으로

티스토리툴바

개인정보

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

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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