문자열 압축하기

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

입력 예시: aaabbcccccca

출력 예시: a3b2c6a1

run-length

2014/12/05 22:35

RoseMonarchy

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

163개의 풀이가 있습니다. 1 / 17 Page

list=list(str).sorted count=list.count(list[0]) new.append(list[0]) new.append(count) for i in range(count): list.remove(list[0])

2017/08/11 05:15

김초영

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

python 3.6.2입니다

a = input("input: ")
a_list = list(a)
a_set_list = list(set(a))
for i in a_set_list:
    res += i + str(a_list.count(i))

print(res)

set을이용해 중복을없앤후 for을 이용해 중복없는 리스트 a_set_list의 문자를 중복이잇는 a_list에서 카운트하는방식으로 햇습니다

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def run_length(string) :
    result = ''
    count = 1

    for i in range(1, len(string)) :

        if string[i] == string[i-1] :
            count += 1

            if i == len(string) - 1 :
                result = result + string[i-1] + str(count)

        else :
            if count == 1 :
                result = result + string[i-1]
            else :
                result = result + string[i-1] + str(count)

            count = 1

            if i == len(string) - 1 :
                result = result + string[i]

    return result

string1 = input("any serial string : ")
print(run_length(string1))

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import re
a="aaabbbcccdde"
string=""
filted = re.findall("(\w)(\\1*)", a)
for i in range(0,len(filted)) :
               result=filted[i][1]
               c=len(result)
               string+=filted[i][0]+str(c+1)
print(string)

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

C#

using static System.Console;

class StringCompaction
{
    static void Main(string[] args)
    {
        string str = "aaabbcccccca";

        char ch = str[0];
        int cnt = 1;    
        for (int i = 1; i < str.Length; i++)
        {
            if (str[i] != ch)
            {
                Write("{0}{1}", ch, cnt);
                ch = str[i];
                cnt = 1;
            }
            else
            {
                cnt++;
            }
        }
        Write("{0}{1}", ch, cnt);
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
package java_tutorial;

import java.util.Scanner;

public class RepeatComp {

    public static void main(String[] args) {



        Scanner sc = new Scanner(System.in);

        System.out.print("입력 예시 : ");
        String myWords = sc.next();

        char wordSave = myWords.charAt(0);
        int count = 0;

        for(int i = 0; i < myWords.length(); i++)
        {       

                if(wordSave == myWords.charAt(i))
                {                       
                        count++;
                }
                else
                {                   
                        System.out.print(wordSave);
                        System.out.print(count);
                        count = 1;
                }

                wordSave = myWords.charAt(i);

                if(i==myWords.length()-1)
                {
                        System.out.print(wordSave);
                        System.out.print(count);
                }
        }       

    }

}

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

정규표현식을 이용하여 Python으로 풀었습니다.

import re
def zip_by_char(s):
    return ''.join('%s%d' % (cs.group(0)[0], len(cs.group(0))) for cs in re.finditer(r'(\w)\1*', s))
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

JAVA입니다.


public class EX010 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //문자열입력
        StringBuffer orgStr = getInputString();
        //작업 및 출력
        System.out.println("압축된 문자열: " + compressString(orgStr));
    }

    static private StringBuffer compressString(StringBuffer orgStr) {
        for(int i=0; i < orgStr.length(); i++) {
            //현재 문자가 숫자라면 건너띈다.
            if(isString2Int(Character.toString(orgStr.charAt(i))))
                continue;
            //같은문자 count변수, 문자검사 시 이동하는 index변수
            int charCount = 0;
            int curIdx = i;
            //현재 위치(i)부터 다음 문자를 계속 탐색하며 같은 문자라면 charCount++, 다르다면
            while(orgStr.charAt(i) == orgStr.charAt(curIdx)) {
                charCount++;
                curIdx++;
                //문자열의 마지막인지 검사
                if(curIdx > orgStr.length()-1 )
                    break;
            }

            orgStr.replace(i, curIdx, Character.toString(orgStr.charAt(i)) + String.valueOf(charCount));
        }

        return orgStr;
    }

    //int형 수인지 검사
    static private boolean isString2Int(String str) {
        try {
            Integer.parseInt(str);
            System.out.println("true");
            return true;
        }catch(NumberFormatException e) {
            System.out.println("false");
            return false;
        }
    }

    //입력
    static private StringBuffer getInputString() {
        Scanner scan = new Scanner(System.in);
        System.out.print("압축할 문자열: ");
        return new StringBuffer(scan.nextLine());       
    }
}

결과는 문제에 나와있는 것과 같이 나옵니다.

2017/07/04 19:08

pg

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

ans = ''
count = 1 


for i in range(len(s)-1):

    if s.count(s[i]) == len(s):
        ans = s[0] + str(len(s))
        break


    if s[i] == s[i+1]:
        count+=1

        if i == len(s)-2:
            ans = ans + s[i] +str(count)

    else:
        ans = ans + s[i]+str(count)
        count = 1

        if i == len(s)-2:
            ans = ans + s[i+1] + str(count)


print ans
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
i=0
num=1
nums=[]
value_list=[]

value  = input("입력: ")

for member in range(len(value)-1):
    if value[i] != value[i+1]:
        value_list.append(value[i])
    i = i+ 1

value_list.append(value[len(value)-1])

i=0
for member in range(len(value)-1):
    if value[i] == value[i+1]:
        num = num+1
        i = i+1

    else:
       nums.append(num)
       num = 1
       i = i +1

nums.append(1)


i=0
for member in range(len(nums)):
    print(value_list[i]+str(nums[i]),end='')
    i=i+1
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

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

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

run-length x 2
연관 문제
Noname, 2017/08/17 23:29

언어별 풀이 현황
전 체 x 163
기 타 x 23
python x 66
cs x 7
java x 39
cpp x 16
javascript x 3
haskell x 1
php x 2
go x 1
ruby x 1
objectivec x 1
perl x 1
scala x 2