Q09 문자열 압축

domybest·2021년 4월 12일
0

실전 문제

목록 보기
8/34

풀이 코드

알고리즘

문제에서 요구하는 과정을 그대로 구현에 옮기면 된다. 이 문제에서 시간이 오래 걸렸던 이유는 반복문이 끝나고 변수의 최종 상태에 대한 것을 제대로 잡지 못해서 인 것같다. 구현 아이디어 자체는 어렵지 않다.
문자열을 쪼개는 단위는 1개부터 (문자열 길이 / 2)의 길이 만큼 확인하면 된다. 그 이상부터는 어차피 2개 이상으로 쪼개 질 수가 없기 때문이다. 따라서 단위 별로 최종 생성되는 문자열의 길이 중 최소인 것을 출력하면 된다.

1. 이전 부분 문자열과 현재 부분 문자열이 동일하면 count++
2. 동일하지 않다면 지금까지의 count값과 이전 부분 문자열을 출력
(단 count가 1 이하라면 출력하지 않는다.)
3. 남은 문자열 출력 처리

알고리즘의 전체 과정은 위와 같다. 과정만 보면 전혀 어렵지 않은데 반복문에서 변수의 최종 상태를 좀 더 꼼꼼히 점검할 필요가 있는 것 같다. 다음에도 오늘과 같이 시간이 오래 걸려서는 안 된다. 몇 일 후에 다시 한번 풀어보는 시간을 가지자.

자바 개념

String 형에 대해 깊게 공부해보자. String str1 = "자바"; 라고 하면 문자열은 String 객체로 생성되고 변수는 이 객체를 '참조'하게 된다. 이 리터럴이 동일한 값을 가지게 되면 동일한 객체를 참조하게 된다. 예를 들어 String str2 = "자바"; 라고 하면 str1과 str2는 동일한 객체를 참조한다.
하지만 String str1 = new String("자바"); String str2 = new String("자바"); 이렇게 new 연산자로 새로운 객체를 생성한다면 str1과 str2는 서로 다른 객체가 된다. 따라서 == 연산을 진행했을 때 서로 다름으로 결과가 나오게 된다. 따라서 문자열 자체만을 비교하고 싶다면 str1.equals(str2) 이런 식으로 진행하는 것이 좋다.

자바에서 부분 문자열 추출하는 메서드는 substring 메서드이다.

substring(int index); // index부터 끝까지 추출
substring(int start, int end); // start부터 end-1 인덱스까지 추출
profile
기억할 때 까지 반복!

0개의 댓글