문자열 문제 풀이

2022. 11. 8. 01:26파이썬(Python)

반응형

Q) 긴 문자열

- 두 개의 단어를 입력

- 더 긴 단어두 단어의 길이의 차를 출력

- 두 단어의 길이가 같다면 'same' 출력

 

a,b=input().split()

if len(a)<len(b):
    print(b,len(b)-len(a))
elif len(a)==len(b):
    print('same')
else:
    print(a,len(a)-len(b))

결과

>> banana apple
banana 1
>> hello world
same

Q) 문자 개수 세기

- 공백을 포함할 수 있는 문자열 입력 

- 알파벳 1개 입력

- 주어진 문자열에 해당 알파벳이 몇 개 있는지 출력

string=input()
word=input()

cnt=0
for elem in string:
    if elem==word:
        cnt+=1
print(cnt)

결과

>> hello world
>> l
3

Q) 문자열 길이의 합

- 자연수 n을 입력

- n개의 문자열을 입력

- 알파벳 입력

- 모든 문자열 길이의 합과 입력한 알파벳이 등장한 횟수를 출력

n=int(input())

arr=[input() for _ in range(n)]

word=input()

len_sum=0
word_cnt=0
for elem in arr:
    len_sum+=len(elem)
    for elem_word in elem:
        if elem_word==word:
            word_cnt+=1

print(f'문자열의 총 길이는 {len_sum}')
print(f'{word}의 등장한 횟수는 {word_cnt}')

결과

>> 3
>> apple
>> melon
>> pear
>> e
문자열의 총 길이는 14
e의 등장한 횟수는 3

Q) 특정 문자로 끝나는 문자열

- 자연수 n을 입력

- n개의 문자열1개의 알파벳 입력

- 입력한 알파벳으로 끝나는 문자열을 출력.

- 문자열의 개수와 문자열들의 길이의 평균 출력

n=int(input())
arr=[input() for _ in range(n)]
word=input()

string_cnt=0
sum_len=0
for elem in arr:
    if elem[-1]==word:
        print(elem)
        string_cnt+=1
        sum_len+=len(elem)

print(f'{word}로 끝나는 단어의 개수는 {string_cnt}')
print(f'{word}로 끝나는 단어들의 길이 평균은 {sum_len/string_cnt:.2f}')

결과

>> 5
>> apple
>> banana
>> orange
>> grape
>> red
>> e
apple
orange
grape
e로 끝나는 단어의 개수는 3
e로 끝나는 단어들의 길이 평균은 5.33

Q) Run Length 인코딩

- Run Length : 비손실 압축 방식. 연속해서 나온 문자연속해서 나온 개수로 나타냄.

- 문자열을 입력 후 Run Length를 적용한 문자열의 길이와 결과를 출력

string=input()
word=string[0]
encoding=''+word
cnt=1

for elem in string[1:]:
    if elem==word:
        cnt+=1
    else:
        word=elem
        encoding+=str(cnt)
        encoding+=word
        cnt=1
encoding+=str(cnt)

print(len(encoding))
print(encoding)

결과

>> aaaaaaaaaabb
5
a10b2

- encoding : Run Length를 적용한 문자열.

- encoding의 초기값은 입력한 문자열 (string)의 첫 번째 문자

- word는 string을 순회하며 비교할 대상의 문자

- string의 두 번째 문자부터 순회하며 word와 비교.

- word와 같으면 cnt(word의 개수)를 1 증가

- word와 다르면 word를 비교한 문자로 갱신. encoding에 cnt와 word를 concat. cnt를 1로 초기화

- 순회가 끝나면 나머지 cnt를 encoding에 concat

- encoding의 길이와 결과 출력


Q) 숫자 나누기

- 자연수 n을 입력

- 숫자로만 이루어진 문자열을 n개 입력

- 자연수 m을 입력

- m개씩 나누어서 출력

 

n=int(input())
arr=list(map(int,input().split()))
m=int(input())
num=''
for elem in arr:
    num+=str(elem)
for i in range(0,len(num),m):
    if i+m>len(num):
        print(num[i:len(num)])
    else: 
        print(num[i:i+m])

결과

>> 5
>> 123 98 66 45 377
>> 3
123
986
645
377

- n개의 숫자들을 입력 후 str type의 num 변수에 각 숫자들을 str로 변환하여 concat

- num의 index를 기준으로 m만큼 slicing  => num [i:i+m]

- i+mlen(num)을 초과하면 len(num)-1까지 slicing


 

'파이썬(Python)' 카테고리의 다른 글

문자열 회전, 아스키 코드  (0) 2022.11.10
문자열 문제풀이2  (0) 2022.11.09
문자열  (0) 2022.11.03
2차원 배열 활용 2  (0) 2022.11.03
2차원 배열 활용  (0) 2022.10.28