Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Graph
- 이것이 자바다
- R
- s
- JSON
- 윤성우의 열혈 자료구조
- 혼자 공부하는 C언어
- Serialization
- stream
- list 컬렉션
- 메모리구조
- 윤성우 열혈자료구조
- Stack
- 알기쉬운 알고리즘
- insertion sort
- coding test
- Selection Sorting
- 이스케이프 문자
- C 언어 코딩 도장
- Algorithm
- C programming
- datastructure
- buffer
Archives
- Today
- Total
Engineering Note
뒤집은 소수 본문
it 취업을 위한 알고리즘 문제 풀이
문제
코드
import sys
sys.stdin = open("input.txt","rt")
def reverse(x):
#reverseNum = ""
reverseNum = 0
while x>0:
temp = x%10
reverseNum = reverseNum*10 + temp
x //= 10
##숫자를 뒤집는 방법
#str1 = str(x) # 3 2 1
#reverseNum = ''
##for char in str1:
## reverseNum = char + reverseNum
##for i in range(0,len(str1)):
## reverseNum = str1[i] + reverseNum
#for i in range(len(str1)-1,-1,-1):
# reverseNum = reverseNum + str1[i]
return reverseNum
def isPrime(x):
for i in range(2,int(x/2)+1):
if x % i == 0:
return 0
else:
return 1
n = int(input())
num = list(map(int, input().split()))
for i in range(n):
res = int(reverse(num[i]))
#if res == 1:
# continue
flag = isPrime(res)
if flag == 1:
print(res, end = " ")
문제해결방법
- 숫자를 뒤집는 방법을 2가지로 풀어 보았다.
- C언어 스타일로 숫자의 각각의 자리수를 일의자리부터 추출하고 몫을 다시 원래 숫자 변수에 저장한다. 그리고 추출한 일의 자리숫자를 결과값으로 반환할 변수에 저장해둔다. 그리고 몫에서 다시 일의자리 숫자를 추출해준다.(2 번째 진행할 때 사실 일의자리 숫자이지만 기존에는 10의 자리 숫자이다.) 그리고 곳을 다시 원래 숫자 변수에 저장해둔다. 결과값 반환 변수의 10을 곱해 자리수를 늘려주고 방금 구한 나머지 값을 더해 준다. 몫이 0이 될 때 까지 위 과정을 반복하면 일의자리부터 추출하여 역순으로 숫자를 만들어 줄 수 있다.
- 다른 방법은 파이썬의 문자열 연산을 이용하는 것이다.
- 먼저 숫자를 문자열로 형변환 해주고 해당 문자열을 각 문자마다 인덱스값으로 접근하여 문자열 연산을 해준다.
- 여기서 주의할 점은 문자열 연산을 할때는 교환 법칙이 성립하지 않는 다는 것이다. 앞부분에 올 문자와 뒷부분의 올 문자의 순서를 잘 고려해서 연산해주어야 한다.
- 주의 해야할 점은 예외 조건들을 잘 생각해 보아야 한다는 것이다.
- 내가 만든 isPrime 함수로 소수를 검사할 때 인수로 넘어온 x를 2부터 나누면서 나누어 떨어지는 값이 존재하면 0을 반환하도록 나누어 떨어지는 값이 없으면 1을 반환하도록 해주었다. 그런데 여기서 숫자 1을 예외 조건 처리해주지 않으면 1은 소수가 아님에도 불구하고 해당 알고리즘에서는 for 문에 실행을 받지 않고 else문으로 가서 1을 반환하여 소수인것 처럼 동작한다. 그랫 isPrime 함수에서 1이 인수로 넘어왔을 때는 for문을 실행하기 전에 0을 반환하도록 예외처리 해주었다.
'Problem Solving > 파이썬 알고리즘 문제풀이(코딩테스트 대비)' 카테고리의 다른 글
점수계산 (0) | 2021.06.01 |
---|---|
주사위 게임 (0) | 2021.06.01 |
소수(에라토스테네스 체) (0) | 2021.05.31 |
정다면체 (0) | 2021.05.30 |
자릿수의 합 (0) | 2021.05.30 |
Comments