파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi

문제 링크 : https://www.acmicpc.net/problem/10808

 

10808번: 알파벳 개수

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 

알파벳을 카운팅하여 출력해야한다. 따라서 먼저 0으로된 배열을 만들어 준다. (변수 answer)

다음 answer의 자릿값(인덱스)를 알기 위해 알파벳순서에 맞는 문자열을 만든다.

그리고 for문을 이용하여 입력되는 input 문자를 하나씩 자릿값에 맞게 +1해준다.

 

 

alph = 'abcdefghijklmnopqrstuvwxyz'
answer = [0 for _ in range(26)]
s = input()
for i in s:
    idx = alph.find(i)
    answer[idx] +=1
answer=[str(k) for k in answer]
print(" ".join(answer))

 

반응형

공유하기

게시글 관리

구독하기newmon

'🧮 알고리즘 문제 풀이 (Online judge) > -- 백준 (BOJ) - Python' 카테고리의 다른 글

백준 (boj) 13301 파이썬 - 타일 장식물 (피보나치 반복문)  (0)2020.03.13백준 (boj) 1259 파이썬 - 팰린드롬수  (0)2020.03.12백준 (boj) 11723 파이썬 - 집합  (0)2020.03.11백준 (boj) 15829 파이썬 - Hashing  (0)2020.03.11백준 (boj) 1541 파이썬 - 분산처리  (0)2020.03.09

파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi
코드 플러스

🚩 문제 설명

https://www.acmicpc.net/problem/10808

 

10808번: 알파벳 개수

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

www.acmicpc.net

파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi
BJ10808
⏱️ 시간 복잡도
▪ 문자열의 길이를 N이라고 한다면 시간 복잡도는 O(N)에 해당한다.

◾ 소문자로 이루어진 문자열 S가 주어지고, 해당 문자열에서 각 알파벳이 몇 개가 포함되어 있는지 구하는 문제

◾ 즉슨, 26개의 알파벳 중에서 문자열에 있는 소문자가 몇 개 있는지 출력하는 문제

◾ 대표적인 아스키 코드

  • '0' ➡️ 48
  • 'A' ➡️ 65
  • 'Z' ➡️ 97

 

 

 


 

 

 

✅ 입출력

1) 소문자로 이루어진 문자열 S가 주어진다.
return ➡️ 문자열 S에 포함된 알파벳의 갯수를 출력한다. 26개의 문자로 구성되어 출력해야한다.

✔️ 예제 1

baekjoon
1 1 0 0 1 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0

 

 

 


 

 

 

📑 문제 풀이

with 파이썬 (Python)
파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi
import sys

alphabet = [chr(i) for i in range(ord('a'), ord('z') + 1)]
S = list(sys.stdin.readline().strip())
ans = [0] * 26

for s in S:
    if s in alphabet:
        ans[alphabet.index(s)] += 1

print(*ans)

더보기

➕ 다른 코드

s = input()
for i in range(26):
    ch = chr(i+ord('a'))
    print(s.count(ch), end= ' ')

💬 Point

➡️  range(ord('A') , ord('Z') + 1)
➡️  alphabet.index()

◾ alphabet 배열을 만들어 놓고 각자의 인덱스를 두었다.

◾ 만약 s가 주어진 문자열에 있다면 해당 알파벳의 인덱스를 추가하는 형식으로 만들었다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# 코드플러스 알파벳 개수

# 백준 10808 알파벳 개수 파이썬


 

728x90

공유하기

게시글 관리

구독하기흘러가는 프로그래밍 블로그

저작자표시 비영리 변경금지

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글

[자료구조(참고)] [BJ10820] 문자열 분석  (0)2021.11.29[자료구조(참고)] [BJ10809] 알파벳 찾기  (0)2021.11.29[자료구조(참고)] [BJ1935] 후위 표기식2  (0)2021.11.29[자료구조(연습)] [BJ17299] 오등큰수  (0)2021.11.28[자료구조(연습)] [BJ10799] 쇠막대기  (0)2021.11.28

10808번: 알파벳 개수

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

www.acmicpc.net

문제

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

출력

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

예제 입력 

baekjoon

예제 출력 

1 1 0 0 1 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0
풀이

알파벳의 개수를 출력하는 문제이다.

우선 알파벳의 개수를 의미하는 원소 26개의 배열을 만들어준다.

그리고 문자의 유니코드 값을 돌려주는 ord 함수를 이용하여

각 알파벳의 자리에 맞는 배열의 인덱스에 1씩 더해주면 된다.

s = list(input())
r = [0 for i in range(26)]
for i in s:
    r[ord(i)-97] += 1
print(*r)

안녕하세요 이승혁입니다.

이번 시간에는 지난 시간에 이어 문자열을 가지고 여러 변환, 조작등을 하는 실습을 진행해 보도록 하겠습니다.

< 실습 리스트 > 

- 문자열 길이 구하기

- 문자열 알파벳 or 숫자 확인

- 문자열 대소문자 변환

- 문자열 공백 제거

- 문자 자료형 변환

- 문자열에 특정 문자 개수 세기

- 문자열의 특정 문자 위치 찾기

- 특정 문자로 분리하기

- 특정 문자로 결합하기

- 특정 문자를 다른 문자로 변환하기


※ 문자열 길이 구하기

     len함수를 사용하여 문자열의 구성 문자 개수를 확인할 수 있습니다.

     리스트와 같은 반복가능한(iterable) 객체에 대해서는 구성 요소의 개수를 반환해 줍니다.

a='Tistory blog'
print(len(a)) # 12

b=range(1,10)
print(len(b)) # 9

c=[1,2,3,4,5]
print(len(c)) # 5
파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi

※ 문자열 알파벳 or 숫자 확인

     문자열은 숫자, 알파벳, 한글, 특수문자 등으로 구성됩니다.

     3가지 방법으로 문자(열)을 확인할 수 있습니다.

     1. 문자가 숫자로 이루어져 있는가? --> isdigit()

     2. 문자가 언어(알파벳,한글)로 이루어져 있는가? --> isalpha()

     3. 언어가 모두 숫자와 언어로 이루어져 있는가 ? / 특수문자나 기호는 없는가 ?  --> isalnum()

    각 함수들은 True / False 를 리턴합니다.

a='Tistory'
b='7815267'
c='7815267b?'

print(a.isalpha())  # True
print(b.isdigit())  # True
print(c.isalnum())  # False
파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi

※ 문자열 대소문자 변환

     소문자 알파벳을 대문자로, 대문자 알파벳을 소문자로 변환할 수 있습니다.

     대문자로 변경에는 upper 함수를, 소문자로 변경에는 lower 함수를 사용합니다.

A='lee '
B='SEUNG HYUK'

print(A.upper())
print(B.lower())
print(A[0].upper()+A[1:].lower()+B.lower())
파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi

※ 문자열 공백 제거

     문자열 객체는 좌, 우 공백을 제거한 결과를 반환해주는 strip 메소드를 갖습니다. 

     오른쪽 공백 제거 --> rstrip()

     좌측 공백 제거 --> lstrip()

     좌우 공백 제거 --> strip()

파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi
공백을 확인할 수 있다.
파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi

공백이 사라졌는지 확인하기 위해 언더바('_')를 붙여 출력해 보았습니다.

순서대로 오른쪽 공백, 왼쪽 공백, 좌우 공백이 사라진 것을 확인할 수 있습니다.

마지막에 생긴 공백은 그냥 출력해도 드래그 하면 생기는 것을 확인했습니다.


※ 문자 자료형 변환

     파일에 기록된(csv,txt,xlsx...) 파일들을 로드(load)하면 숫자는 문자열로 처리됩니다.

     100으로 기록된 숫자 100이 '100'으로 사용되게 됩니다.

     따라서 자료형을 변환해 줍니다. --> int or float

     반대로 숫자가 아닌 문자열로 사용되는 경우도 변환해 줍니다. --> str

org_num='100'
org_txt=100

trans_num=int(org_num)
trans_num2=float(org_num)
trans_txt=str(100)

print(type(trans_num),trans_num)
print(type(trans_num2),trans_num2)
print(type(trans_txt),trans_txt)
파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi

변수의 자료형이 변환되었음을 확인할 수 있습니다.


※  특정 문자 개수 세기

     문자열 객체의 메소드 중 count 메소드는 문자열을 이루고 있는 문자 중, 특정 문자의 개수를 반환해 줍니다.

     해당 문자열에서 문자의 개수를 찾습니다.

     '문자열'.count('찾을문자')

txt='aslkdrjfoiewnaglkdnfdsfvjkxzcbfiewahbgjf,amvbcaskjlvghaeiuofgasdg'

print(txt.count('f'))
파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi

     문자열 객체 뿐 아니라 리스트 객체 역시 count 메소드를 가지고 있습니다.

listdata=[1,2,3,4,1,2,3,4,1,2,3,4,5]

print(listdata.count(1))
print(listdata.count(5))
파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi

응용 ) 각 원소의 개수 출력하기

listdata=[1,2,3,4,1,2,3,4,1,2,3,4,5]
a=list(set(listdata))
for i in a:
    print('%d의 개수 : %d'%(i,listdata.count(i)))
파이썬 알파벳 개수 세기 - paisseon alpabes gaesu segi

쉽고 편하게 이루고 있는 원소들을 파악할 수 있습니다.

물론 데이터가 숫자 뿐 아니라 영어나 기타 기호들이 섞인 경우 데이터를 정제 하는 작업이 추가되어야 합니다.


이번 시간은 문자열을 조작해 보았습니다.

다음시간엔 이어서 문자열의 특정 문자 위치 찾기, 특정 문자로 분리하기,  특정 문자로 결합하기, 특정 문자를 다른 문자로 변환하기에 대한 실습을 진행해 보도록 하겠습니다.

읽어주셔서 감사합니다.