본문 바로가기

알고리즘/인프런

섹션 1. String(문자열)_11. 문자열 압축

문제

  • 알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 
  • 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오.
  • 단 반복횟수가 1인 경우 생략합니다.

입력

  • 첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.

출력

  • 첫 줄에 압축된 문자열을 출력한다.

입출력 예제


풀이 방식을 정리해보자.

 

메소드 구현으로 바로 넘어가보자.

  • 입력받은 문자열에 빈 문자를 더한다.

그 이유는 i와 i+1 을 이용해서 앞뒤 문자열을 비교할건데, 맨 마지막 문자와 비교할 문자를 만들어주기 위해서이다.

AB 라는 문자가 있을 때, B와 비교할 뒤에 문자가 없기 때문에 임의로 빈 문자를 넣어주는 것이다.

  • cnt라는 변수를 1로 초기화한다.

cnt는 중복된 수를 넣어서 결과에 출력하기 위한 변수인데, 중복된 수가 없으면 갯수를 출력하지 않기 때문에 1로 초기화하는 것이다.

  • 0부터 문자열의 길이-1까지 도는 for문을 작성한다.

맨 마지막은 빈 문자이기 때문에 -1까지로 범위를 잡아준다.

  • i와 i+1 즉, 앞뒤 문자가 동일한지 확인하고, 동일하면 cnt 값을 1 더해준다.
  • 앞뒤 문자가 동일하지 않다면 결과값에 해당 문자를 출력한다.
  • cnt가 1 초과일 경우에는 숫자를 출력하고 cnt를 1로 초기화한다.

'중복한 문자 + 중복 갯수' 의 형태로 출력해야하므로 중복된 문자가 없으면 해당 문자를 출력해야 한다.

단, 이전에 중복된 문자가 여러개였고, 그 다음으로 중복된 문자가 없을 때에는 갯수를 출력하고 cnt를 1로 초기화한다.

 

수행 결과를 확인한다.


해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.