영어 소문자로만 이루어진 문장 s가 주어졌을 때, 이 문장이 팬그램(pangram)인지 확인해야 합니다. 팬그램이란 알파벳 a부터 z까지 총 26개의 글자를 모두 포함하고 있는 문자열을 의미합니다.
예를 들어, 입력이 s = "thegrumpywizardmakestoxicbrewfortheevilqueenandjack"이라면 a~z의 모든 글자가 포함되어 있으므로 출력 결과는 True가 됩니다.
문제 해결 접근 방법
다음 단계를 따라 문제를 해결할 수 있습니다.
빈 딕셔너리(dictb)를 하나 생성합니다.
문자열 s의 각 문자 i를 순회하면서 해당 문자의 등장 횟수를 딕셔너리에 기록합니다. (dictb[i] = dictb.get(i, 0) + 1)
딕셔너리의 크기, 즉 서로 다른 문자의 개수가 26과 같으면 True를 반환합니다.
그렇지 않으면 False를 반환합니다.
구현 예제
def solve(s):
dictb = {}
for i in s:
dictb[i] = dictb.get(i, 0) + 1
if len(dictb) == 26:
return True
return False
s = "thegrumpywizardmakestoxicbrewfortheevilqueenandjack"
print(solve(s))
입력
"thegrumpywizardmakestoxicbrewfortheevilqueenandjack"
출력
True
더 간결한 대안: set 활용하기
파이썬에서는 집합(set) 자료형을 사용하면 위 로직을 한 줄로 더 간결하게 표현할 수 있습니다. 집합은 중복을 허용하지 않기 때문에, 문자열을 집합으로 변환하면 자동으로 고유한 문자만 남게 됩니다.
def solve(s):
return len(set(s)) == 26
이 방법 역시 시간 복잡도는 O(n)으로 동일하지만, 코드가 훨씬 짧고 가독성이 높아 실무에서 널리 사용됩니다. 반면 딕셔너리 방식은 각 문자별 등장 횟수까지 함께 얻을 수 있다는 장점이 있으므로, 상황에 맞게 선택하면 됩니다.