Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_문자열 압축) 본문
https://cote.inflearn.com/contest/10/problem/01-11
(위의 링크는 인프런 로그인 후, 해당 강의를 사지 않으면 접속이 되지 않습니다)
11. 문자열 압축
예시 입력 1
KKHSSSSSSSE
예시 출력 1
K2HS7E
예시 입력 2
KSTTTSEEKFKKKDJJGG
예시 출력 2
KST3SE2KFK3DJ2G2
내가 푼 풀이 (Time: 151ms Memory: 27MB)
i-1 인덱스 방식으로 풀었다.
1. 첫번째 문자를 미리 stringBuilder에 넣어준다.
2. 반복문 돌때 2번째 인덱스인 1부터 시작하고, 각각 순회하면서 이전 문자랑 일치하는지 체크한다.
3. count를 1로 초기화 해놓고, 일치할 경우 +를 한다.
4. 일치하지 않을 경우, count가 1이상이라면, 숫자를 먼저 대입하고, 이후에 해당 인덱스값의 문자를 넣는다.
5. 마지막 문자에 대한 count가 증가했을 경우 마지막 분기처리에서 추가해준다.
import java.util.Scanner;
public class Main {
public String solution(String str) {
StringBuilder sb = new StringBuilder();
int count = 1;
sb.append(str.charAt(0));
for (int i = 1; i < str.length(); i++) {
if (str.charAt(i) == str.charAt(i - 1)) {
count++;
} else {
if (count > 1) {
sb.append(count);
count = 1;
}
sb.append(str.charAt(i));
}
}
// 마지막 문자에 대한 처리
if (count > 1) {
sb.append(count);
}
return sb.toString();
}
public static void main(String[] args) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(main.solution(str));
}
}
강의 답안 (Time: 156ms Memory: 27MB)
내가 푼 풀이랑 비슷하지만 인덱스 관련해서 훨씬 쉽게 풀었다
1. IndexOutOfBoundsException이 나지 않도록 입력 문자열에 공백을 추가한다.
2. i+1 인덱스 방식으로 풀었다.
import java.util.Scanner;
public class Main {
public String solution(String str) {
str += " ";
StringBuilder sb = new StringBuilder();
int count = 1;
for (int i = 0; i < str.length()-1; i++) {
if (str.charAt(i) == str.charAt(i+1)) count++;
else {
sb.append(str.charAt(i));
if (count > 1 ) sb.append(count);
count = 1;
}
}
return sb.toString();
}
public static void main(String[] args) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(main.solution(str));
}
}
'알고리즘 > 인프런 - Java알고리즘 입문' 카테고리의 다른 글
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Array_큰 수 출력하기) (0) | 2023.09.04 |
---|---|
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_암호) (0) | 2023.08.29 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_가장 짧은 문자거리) (0) | 2023.08.28 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_숫자만 추출) (0) | 2023.08.28 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_유효한 팰린드롬) (0) | 2023.08.28 |