728x90
반응형
11. 문자열 압축
설명
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는
문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오.
단 반복횟수가 1인 경우 생략합니다.
입력
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
출력
첫 줄에 압축된 문자열을 출력한다.
예시 입력 1
KKHSSSSSSSE
예시 출력 1
K2HS7E
예시 입력 2
KSTTTSEEKFKKKDJJGG
예시 출력 2
KST3SE2KFK3DJ2G2
import java.util.*;
public class Main {
public String solution(String str) {
String answer = "";
str += " ";
char[] arr = str.toCharArray();
int tmp = 1;
for (int i = 0; i < str.length() - 1; i++) {
if (arr[i] == arr[i + 1])
tmp++;
else {
answer += arr[i];
if (tmp >= 2)
answer += tmp;
tmp = 1;
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
import java.util.*;
public class Main {
public String solution(String str) {
String answer = "";
char[] arr = str.toCharArray();
int cnt = 1;
for (int i = 0; i < str.length(); i++) {
if (i != str.length()-1&&arr[i] == arr[i + 1]) {
cnt++;
} else {
answer += arr[i];
if (cnt >= 2) {
answer += cnt;
cnt = 1;
}
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
import java.util.Scanner;
public class Main {
public String solution(String str) {
String answer = "";
char[] arr = str.toCharArray();
int n = 1;
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1 && arr[i] == arr[i + 1]) {
n++;
} else {
answer += arr[i];
if (n > 1)
answer += n;
n = 1;
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String input1 = in.next();
System.out.println(solution(input1));
}
static String solution(String s){
String answer="";
char c=' ';
int n=1;
//반복횟수 1은 제외하고, 나타내기
for(int i=0;i<s.length();i++){
if(c==s.charAt(i)){
n++;
}
else{
if(c!=' ')
answer+=c;
if(n!=1)
answer+=n;
c=s.charAt(i);
n=1;
}
}
answer+=c;
if(n!=1) answer+=n;
return answer;
}
}
+) 세련된 풀이
1. 문자열에 끝에 공백을 넣어서, 맨 끝 바로 앞까지 돌아도 되게 변경
s = s + " ";
for (int i = 0; i < s.length() - 1; i++) {
2. int형 변수인 cnt를 직접 String에 추가하는 방법
answer += String.valueOf(cnt);
import java.util.*;
class Main {
public String solution(String s) {
String answer = "";
s = s + " ";
int cnt = 1;
for (int i = 0; i < s.length() - 1; i++) {
if (s.charAt(i) == s.charAt(i + 1))
cnt++;
else {
answer += s.charAt(i);
if (cnt > 1)
answer += String.valueOf(cnt);
cnt = 1;
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
char [] to String 변환 메서드
1. charAt()
2. toCharArray()
str.charAt(i)
: String의 i번째 문자
String.valueOf(i)
: int to String 변환
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String str= in.next();
String answer="";
char tmp=' ';
int cnt=1;
for(char c:str.toCharArray()){
if(tmp==c){
cnt++;
}else{
if(tmp!=' ')answer+=tmp;
if(cnt!=1)answer+=cnt;
cnt=1;
tmp=c;
}
}
answer+=tmp;
answer+=cnt;
System.out.println(answer);
}
}
728x90
반응형
'Java > Java 알고리즘 인프런' 카테고리의 다른 글
[Ch.02 - Array] 01. 큰 수 출력하기 (0) | 2022.05.17 |
---|---|
[Ch.01 - String] 12. 암호 (+Integer.parseInt( ,2)) (0) | 2022.05.16 |
[Ch.01 - String] 10. 가장 짧은 문자거리 # (+ Math.min, charAt) (0) | 2022.05.16 |
[Ch.01 - String] 09. 숫자만 추출 (+ replaceAll) (0) | 2022.05.15 |
[Ch.01 - String] 08. 유효한 팰린드롬 (+ replaceAll ) (0) | 2022.05.15 |