Coding/코딩테스트 공부

[알고리즘(Python)/코테공부] 뒤집은 소수

주디(Junior developer) 2022. 1. 27. 14:00

*인프런 - 파이썬 알고리즘 문제풀이 (코딩테스트 대비) 강의를 공부한 내용을 바탕으로 작성했습니다.*

 

 

 

 

뒤집은 소수

 

 

1. 문제

N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력 한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.
뒤집는 함수인 def reverse(x) 와 소수인지를 확인하는 함수 def isPrime(x)를 반드시 작성하 여 프로그래밍 한다.


2. 입력예제

5
32 55 62 3700 250


3. 출력예제

23 73

 

 

 

 

- 처음에 내가 접근한 방식

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def reverse(x):
    '''
    #내가 푼 방식
    x = str(x)
    x2 = ''
    for i in range(len(x)-1, -1, -1):
        x2 += x[i]
    if x2[0]=='0':
        for i in range(1, len(x2)):
            if x2[i]!='0':
                break
        x2 = x2[i:len(x2)]
    return x2
    '''
cs

 

처음에는 예를 들어 숫자가 2900이면 이 수를 뒤집었을 때 92가 되어야 하므로, 우선 2900을 0092로 만들고 그 다음에 숫자가 0으로 시작한다면, 어디서 0이 더 이상 나타나는 지를 알아내고 슬라이싱을 통해 92로 만드는 방법을 생각했다.

 

 

 

 

 

 

- 강의에서 접근한 방식

1
2
3
4
5
6
7
8
def reverse(x):
    res = 0
    while x > 0:
        t = x % 10
        res = res * 10 + t
        x = x // 10
    return res
 
cs

 

강의에서는 문제를 훨씬 더 간단히 접근했다. 숫자의 나머지와 자릿수를 통해 쉽게 구할 수 있었다. 나머지가 계속 0이라면 res는 계속 0일 것이고, 더 이상 나머지가 0이 아니라면 1의 자리수부터 더하면서 결국에는 뒤집은 수를 알아낼 수가 있다.

 

 

 

 

 

🥕해결 point

 

1. 어떻게 하면 0을 무시할까?

        - 슬라이싱도 가능은 하지만 더 논리적으로 접근해보자!

👉 숫자의 몫, 나머지, 자릿수 사이의 관계를 파악해보자

 

 

❗️만약에 문제가 9200처럼 뒷자리에 0이 포함될 때가 아니라, 0092처럼 앞자리에 0이 포함되어 있을 때 0을 지우는 방법 ❗️

-> res = res * 10 + num (num은 자릿값)

->이때는 0092를 숫자가 아닌 문자열로 접근하자