관리 메뉴

솜씨좋은장씨

[BaekJoon] 8611번 : 팰린드롬 숫자 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 8611번 : 팰린드롬 숫자 (Python)

솜씨좋은장씨 2022. 9. 9. 17:54
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 팰린드롬 숫자 입니다.

 

8611번: 팰린드롬 숫자

\(n\)을 \(2, 3, \dots, 10\) 진법으로 나타냈을 때, 팰린드롬인 경우가 없다면, "NIE"를 출력한다. 그 외의 경우에는 팰린드롬이 되는 진법 \(b\)와 \(n\)을 \(b\)진법으로 나타낸 수 \(m\)을 출력한다. 출력은

www.acmicpc.net

👨🏻‍💻 문제풀이

이 문제는 10진수 숫자를 입력받으면

2진수부터 10진수 까지 변환하면서 그 변환한 값이 팰린드롬인지 아닌지 확인하여

그 값이 팰린드롬인 경우

몇 진수의 수인지와 변환한 값을 출력하는 문제입니다.

% 진수 변환 

def converter(number, n):
    answer = ""
    temp = list("0123456789ABCDEF")
    
    if number == 0:
        answer = "0"
    else:
        while number:
            answer += temp[number % n]
            number //= n
            
    return answer[::-1]

2021.08.21 - [Programming/코딩 1일 1문제] - [BaekJoon] 14915번 : 진수 변환기 (Python)

 

[BaekJoon] 14915번 : 진수 변환기 (Python)

코딩 1일 1문제! 오늘의 문제는 백준의 진수 변환기 입니다. 14915번: 진수 변환기 변환한 n진수의 수를 출력한다. 11~16 진수의 경우 10 이상의 수는 A~F 문자를 사용한다. 예를 들어, 10은 A, 11은 B, 12

somjang.tistory.com

진수 변환에는 예전에 풀었던 14915번의 방법을 활용하였습니다.

% 팰린드롬 확인

def check_palindrome(converted_number):
    is_palindrome = False
    
    if converted_number == converted_number[::-1]:
        is_palindrome = True
        
    return is_palindrome

팰린드롬인지 아닌지 확인하는 부분은 [::-1] 을 활용하였습니다.

% 2~10진수 로 변환한 값중 팰린드롬인 값 찾기

def palindrome_number(number):
    answer_list = []
    for n in range(2, 11):
        converted_number = converter(
            number=number, n=n
        )
        
        is_palindrome = check_palindrome(
            converted_number=converted_number
        )
        
        if is_palindrome:
            answer_list.append((n, converted_number))
            
    return answer_list

위의 두 함수를 활용하여 2~10 진수로 변환한 값 중에 팰린드롬인 값을 찾아 리스트에 담았습니다.

% 정답 형식으로 출력하는 함수

def print_answer(answer_list):
    
    if not answer_list:
        print("NIE")
    
    for answer in answer_list:
        print(f"{answer[0]} {answer[1]}")

👨🏻‍💻 코드 ( Solution )

def converter(number, n):
    answer = ""
    temp = list("0123456789ABCDEF")
    
    if number == 0:
        answer = "0"
    else:
        while number:
            answer += temp[number % n]
            number //= n
            
    return answer[::-1]


def check_palindrome(converted_number):
    is_palindrome = False
    
    if converted_number == converted_number[::-1]:
        is_palindrome = True
        
    return is_palindrome


def palindrome_number(number):
    answer_list = []
    for n in range(2, 11):
        converted_number = converter(
            number=number, n=n
        )
        
        is_palindrome = check_palindrome(
            converted_number=converted_number
        )
        
        if is_palindrome:
            answer_list.append((n, converted_number))
            
    return answer_list


def print_answer(answer_list):
    
    if not answer_list:
        print("NIE")
    
    for answer in answer_list:
        print(f"{answer[0]} {answer[1]}")
        
    
if __name__ == "__main__":
    number = int(input())
    
    answer_list = palindrome_number(number=number)
    
    print_answer(answer_list=answer_list)
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments