관리 메뉴

커리까지

[백준] 2153번 소수단어 파이썬 본문

알고리즘/풀이

[백준] 2153번 소수단어 파이썬

목표는 커리 2021. 9. 2. 21:00
728x90
SMALL

문제

소수란 1과 자기 자신으로만 나누어떨어지는 수를 말한다. 예를 들면 1, 2, 3, 5, 17, 101, 10007 등이 소수이다. 이 문제에서는 편의상 1도 소수로 하자.

알파벳 대소문자로 이루어진 영어 단어가 하나 있을 때, a를 1로, b를 2로, …, z를 26으로, A를 27로, …, Z를 52로 하여 그 합을 구한다. 예를 들어 cyworld는 합을 구하면 100이 되고, abcd는 10이 된다.

이와 같이 구한 수가 소수인 경우, 그 단어를 소수 단어라고 한다. 단어가 주어졌을 때, 그 단어가 소수 단어인지 판별하는 프로그램을 작성하시오.

입력

첫째 줄에 단어가 주어진다. 단어의 길이는 20자 이하이다. 주어지는 단어는 알파벳 소문자와 대문자만으로 이루어져 있다.

출력

아래의 예제와 같은 형식으로 출력을 한다. 소수 단어인 경우에는 It is a prime word.를, 아닌 경우에는 It is not a prime word.를 출력한다.

예제 입력 1

UFRN

예제 출력 1

It is a prime word.

제출코드

def is_prime_number(x):
    for i in range(2, int(x ** 0.5) + 1):
        if x % i == 0:
            return False
    return True


def solution():
    lower = {chr(value): idx + 1 for idx, value in enumerate(list(range(97, 123)))}
    upper = {chr(value): (idx + 27) for idx, value in enumerate(list(range(65, 91)))}
    _dict = {**lower, **upper}
    N = (20 * 52) + 1
    num_list = [1]
    for i in range(2, N):
        if is_prime_number(i) == True:
            num_list.append(i)

    text = input()
    sum = 0
    for i in text:
        sum += _dict[i]
    answer = "It is a prime word." if sum in num_list else "It is not a prime word."
    print(answer)

solution()
  1. 소수를 구하는 범위는 문제에 나온것처럼 최대 20글자이고 Z가 52로 가장 큰 수이니 두개를 곱하고 1을 더했다.
  2. lower와 upper은 아스키 코드로 for문을 돌려서 만들고 합쳤다.
  3. 그 다음 텍스트를 for문 돌려서 해당 문자의 값을 더한다.
  4. answer에는 총합이 소수에 있으면 소수라고 저장하고 아니면 소수가 아니라고 저장한다.
728x90
LIST
Comments