문자열 압축하기

문자열을 입력받아서, 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시하여 문자열을 압축하기.

입력 예시: aaabbcccccca

출력 예시: a3b2c6a1

run-length

2014/12/05 22:35

RoseMonarchy

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

168개의 풀이가 있습니다. 13 / 17 Page

import java.util.Scanner;

public class StringComp {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.next()+" ";
        int rep=1;
        StringBuffer res=new StringBuffer();
        for(int i=0;i<str.length()-1;i++){
            if(str.charAt(i) == str.charAt(i+1)){
                rep+=1;
            } else {
                res.append(str.charAt(i));
                res.append(rep);
                rep=1;
            }
        }
        System.out.println(res);
        sc.close();
    }
}

2017/01/11 22:52

바바

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
// C++ 현재 문자가 다음 문자와 다를때만 출력.. 글자가 버퍼 - 1 보다 작아야 함.. 에러 처리 생략..

int main()
{
    char acBuff[ 10000 ]  = { 0, };

    cin >> acBuff;

    int nCount = 0;

    for( unsigned int x = 0 ; x < strlen( acBuff ) ; ++x )
    {
        ++nCount;

        if( acBuff[ x ] != acBuff[ x + 1 ] )
        {
            cout << acBuff[ x ] << nCount;

            nCount = 0;
        } 
    }

    return 0;
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

python 2.7

A = 'aaabbcccccca'
char = A[0]
n = 0
c= 1
new = []

for n in range(len(A)-1):
    if A[n] == A[n+1]:
        c += 1
    else:
        new += char+str(c)
        char = A[n+1]
        c = 1
        if n+1 == len(A)-1:
            new += char + str(c)

print ''.join(new)

결과 : a3b2c6a1

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
#pragma warning(disable:4996)
void zip(char *arr) {
    for (int i = 0; arr[i] != NULL; i++) {
        int k = 1;
        printf("%c", arr[i]);
        if (arr[i + 1] == arr[i]) {
            for (int j = i; arr[j + 1] == arr[j]; j++) {
                k++;
            }

            i = i + k-1;
        }
        printf("%d", k);
    }
}
int main(void) {
    char arr[100];
    scanf("%s", arr);
    zip(arr);
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
public class TextZip {
    public static void main(String[] args) {

        String text = "aaabbcccccca";
        String result = textZip(text);      
        System.out.println("text : " + text);
        System.out.println("result : " + result);
    }

    private static String textZip(String text) {

        char preText = text.charAt(0);
        int tempCount = 1;
        String result = "";

        for (int i = 1; i < text.length(); i++) {
            if (preText == text.charAt(i)) {
                tempCount ++;
            } else {
                result += Character.toString(preText) + tempCount;
                preText = text.charAt(i);
                tempCount = 1;
            }
        }       
        result += Character.toString(preText) + tempCount;

        return result;
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def compact(data):
    result=data[0]
    n=1
    for i in range(1,len(data)):
        if result[-1]==data[i]:
            n+=1
        else:
            result+=str(n)+data[i]
            n=1
    result+=str(n)
    return result
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
#include <string.h>
void main() {
    char str[] ="aaabbcccccca";
    int count = 1;

    for(int i=0;i<strlen(str);i++) {
        if(str[i+1]==str[i])
            count++;
        else {
            printf("%c%d", str[i], count);
            count=1;
        }
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
/*

dev : peanutBro

date : 170218

content :

문자열을 입력받아서, 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시하여 문자열을 압축하기.

입력 예시: aaabbcccccca

출력 예시: a3b2c6a1

*/

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

#include <iostream>
#include <string>
using namespace std;



int main(void)
{
    string inputStr, resultStr="";
    char c = '0';
    int sameCount = 0;

    cout << "문자열을 입력하세요 : ";
    cin >> inputStr;

    for (int i = 0; i < inputStr.length(); i++)
    {
        if (c == '0')
        {
            c = inputStr[i];
            sameCount++;
            char* temp = new char[2];
            temp[0] = c;
            temp[1] = '\0';
            resultStr.append(temp);
            delete[] temp;
        }
        else
        {
            if (c == inputStr[i])
            {
                sameCount++;
            }
            else
            {
                char buff[100]; 
                _itoa(sameCount, buff, 10);
                resultStr.append(buff);
                sameCount = 0;
                c = '0';
                i--;
            }
        }

    }

    char buff[100];
    _itoa(sameCount, buff, 10);
    resultStr.append(buff);

    cout << resultStr;
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

python 3.5.2

answer is 'a3b2c6a1'

마지막 string 에 대한 count부분이 어색(?)합니다. 별도 함수로 분리하려고 해봤는데 잘 안되서 부족하지만 answer_str 을 global 변수로 선언해서 동작하는 버전으로 올립니다.

L='aaabbcccccca'
temp_char = L[:1]
temp_str = ''
answer_str = ''
char_count = 0

def str_count(temp_char) :
    global answer_str
    char_count = temp_str.count(temp_char)
    answer_str += temp_char
    answer_str += str(char_count)        

for x in L :
    if (temp_char == x) :
        temp_str += x
    else :
        str_count(temp_char)
        temp_char = x
        temp_str= x

str_count(temp_char)

print(answer_str)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
public class StringCompression {

    public static void main(String[] args) {
        String s[] = "aaabbcccccca".split("");
        StringBuffer r = new StringBuffer();
        Integer c = 1;
        String b = s[0];
        r.append(s[0]);
        for (int i = 1; i < s.length; i++) {
            System.out.println(s[i] + " " + b);
            if (s[i].equals(b)) {
                c++;
            } else {
                r.append(c);
                r.append(s[i]);
                c = 1;
                b = s[i];
            }
            if(i == s.length-1) {
                r.append(c);
            }
        }
        System.out.println(r);
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

run-length x 2
연관 문제
mohenjo, 2017/09/07 18:30

언어별 풀이 현황
전 체 x 168
python x 68
기 타 x 24
java x 41
cpp x 16
perl x 1
cs x 7
scala x 2
javascript x 3
php x 2
objectivec x 1
ruby x 1
go x 1
haskell x 1