Code about AI/Python

[Python] 백준 1264번: 모음의 개수, if ~ in, for 문자 in 문자열

도비(Doby) 2022. 3. 1. 14:33

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

 

1264번: 모음의 개수

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 영어 대소문자, ',', '.', '!', '?', 공백으로 이루어진 문장이 주어진다. 각 줄은 최대 255글자로 이루어져 있다. 입력의 끝에는 한 줄

www.acmicpc.net

이번 문제에서는 2가지 문법을 배울 수 있었다.

  • if ~ in
  • for 문자 in 문자열

우선 내가 짠 코드(정답)부터 보자

while True:
    s = input()
    if s == "#":
        break
    
    #print(s)
    
    cnt = 0
    for i in range(0, len(s)):
        if (s[i] == 'a' or s[i] == 'e' or s[i] == 'i'
        or s[i] == 'o' or s[i] == 'u' or s[i] == 'A'
        or s[i] == 'E' or s[i] == 'I' or s[i] == 'O'
        or s[i] == 'U'):
            cnt += 1
            
            
    print(cnt)

if문이 상당히 길어서 비효율적으로 보여서 다른 사람들도 이렇게 길게 짰을까 싶어서 구글링 해보았다.

if ~ in

if c in 'aeiouAEIOU':

4줄에 걸쳤던 if문을 한 줄로 정리할 수 있었다.

+ c는 문자형 변수

+ 파이썬은 문자열을 '(작은따옴표)로도 묶을 수 있음

 

>> c라는 문자형 변수가 저 문자열 중 원소와 같은 것이 있냐고 묻는 문법이다.

>> C++에 비해 간단명료하게 나타낼 수 있었다.

 

for 문자 in 문자열

for c in s:

len() 함수를 통하여 문자열의 길이를 구하고, for의 범위를 알려준 뒤 s[i]를 통해 문자를 반환하여 조건을 비교했었는데

그럴 필요 없었다.

 

in 다음에 오는 변수에 따라 c가 타입이 정해져서 간단명료하게 표현할 수 있었다.

이는 문자열뿐만 아니라 아직 배우지 않은 파이썬 자료구조(tuple, list, dictionary)도 마찬가지다.

 


뿐만 아니라 더 얻을 수 있었던 지식은

  • 파이썬은 들여 쓰기에 따라 코드 블록이 구성된다.
  • 논리 연산자는 C++(&&, ||)과 달리 and, or 이러한 방법으로 표현된다.

[AC 코드]

while True:
    s = input()
    if s == '#':
        break
    cnt = 0
    for c in s:
        if c in 'aeiouAEIOU':
            cnt += 1
    print(cnt)
728x90