*인프런 - 파이썬 알고리즘 문제풀이 (코딩테스트 대비) 강의를 공부한 내용을 바탕으로 작성했습니다.*
뒤집은 소수
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를 숫자가 아닌 문자열로 접근하자
'Coding > 코딩테스트 공부' 카테고리의 다른 글
백준 19238번 문제 - BFS & 구현 (0) | 2025.02.17 |
---|---|
[이.코.테] chap13. DFS/BFS - 특정 거리의 도시 찾기 (0) | 2022.07.29 |
[이.코.테] chap11. 그리디 - 만들 수 없는 금액 (1) | 2022.07.20 |
[코드 리뷰] 자료구조&알고리즘 - 2강 실습(2) 리스트에서 원소 찾아내기 (0) | 2022.06.28 |
[알고리즘(Python)/코테공부] 대표값 (0) | 2022.01.18 |