Koala - 9기/기초 알고리즘 스터디

[백준/python] 팬그램

sebinChu 2023. 1. 7. 19:55

🔎 처음 시도

이중 포문으로 하나하나 비교하면 되겠지?라는 생각으로 모두 비교해줬는데, 이렇게 하면 입력이 한꺼번에 주어졌을 때 밀리는 현상 때문에 올바르게 판단을 못한다. 얘가 검사를 다할 때까지 sleep을 건다고 쳐도, 잘못된 알고리즘인 것같다는 생각이 들었다. 어쨌든 문자열을 보려면 모든 문자열을 다 확인해봐야 하는데,, 어떻게 할까 하다가 알게된 find 함수

str.find(찾고자하는 문자열) 형식으로 사용된다. 

만약 값을 찾으면 str의 해당 인덱스가 반환되고, 없으면 -1을 반환한다.

 

🤔 두 번째 시도

cnt = 26 # 총 알파벳 개수
while True:
    sentence = input()
    sentence.replace(" ", "")
    if sentence == '*':
        break
    for alphabet in range(97,123):
        if sentence.find(chr(alphabet)) == -1:
            cnt -= 1
            break
 
    if cnt >= 26:
        print('Y')
    else:
        print('N')

분명히 로직은 맞는 것같은데 계속 틀렸습니다의 연발..

이유는 바로 반복문에서의 변수 초기화 문제였다. 케이스 마다 cnt를 확인하고싶으면 케이스가 갱신되는 while 문 안에서 cnt의 기본값을 설정해줘야 한다는 점...!! replace는 없어도 되는데 혹시나 하는 마음으로 시도 해본 것.😂

 

💻 최종 코드

위 코드에서 cnt 변수만 while 안쪽으로 넣고 갱신되도록 만들어 주면 된다.

 앞으로 반복문을 짤 때 반복문이 돌아가는 로직에 대해서 깊게 이해하고, 구현해야겠다는 생각이 들었다.

cnt = 26 # 총 알파벳 개수
while True:
	cnt = 26 # 총 알파벳 개수
    sentence = input()
    sentence.replace(" ", "")
    if sentence == '*':
        break
    for alphabet in range(97,123):
        if sentence.find(chr(alphabet)) == -1:
            cnt -= 1
            break
 
    if cnt >= 26:
        print('Y')
    else:
        print('N')