Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 우분투
- github
- PYTHON
- 프로그래머스
- Kaggle
- 더현대서울 맛집
- 맥북
- leetcode
- 편스토랑 우승상품
- 코로나19
- 데이콘
- AI 경진대회
- Baekjoon
- ChatGPT
- 금융문자분석경진대회
- 파이썬
- dacon
- 프로그래머스 파이썬
- ubuntu
- programmers
- 백준
- 편스토랑
- Git
- hackerrank
- gs25
- 캐치카페
- 자연어처리
- Docker
- SW Expert Academy
- Real or Not? NLP with Disaster Tweets
Archives
- Today
- Total
솜씨좋은장씨
[BaeKJoon] 11653번: 소인수분해 (Python) 본문
728x90
반응형
1일 최소 1문제 풀기 프로젝트 3일차!
오늘은 소인수 분해 문제를 풀어보려합니다.
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하는 문제입니다.
소인수분해 문제이니 2일차에 풀었던 에라토스테네스의 체 문제를 활용하여 소수를 구하고 그 소수를 활용하여 풀어보기로 했습니다.
def getPrimaryNum_Eratos(N):
nums = [True] * (N + 1)
for i in range(2, len(nums) // 2 + 1):
if nums[i] == True:
for j in range(i+i, N, i):
nums[j] = False
return [i for i in range(2, N) if nums[i] == True]
에라토스테네스의 체 방법으로 소수를 구하고
N = int(input())
prime_nums = getPrimaryNum_Eratos((N // 2) + 1)
prime_nums_reverse = reversed(prime_nums)
# print(prime_nums)
answers = []
for prime_num in prime_nums_reverse:
if N % prime_num == 0:
while(N % prime_num == 0):
answers.append(prime_num)
N = N // prime_num
for num in answers:
print(num)
그 소수의 list를 거꾸로 반전시킨 뒤 큰 소수부터 나누어지는 지 비교하여 나누어지면
그 수로 N % 소수의 나머지의 값이 0이 될때까지 계속 나누면서 나눌때마다 해당 소수의 값을 append 해주어 정답 list를 만들고
마지막에 출력을 해주는 방법으로 구현해보았습니다.
결과는!
앗..... 출력을 반대로 해주어
조금 수정하여 제출하여 보았지만!
def getPrimaryNum_Eratos(N):
nums = [True] * (N + 1)
for i in range(2, len(nums) // 2 + 1):
if nums[i] == True:
for j in range(i+i, N, i):
nums[j] = False
return [i for i in range(2, N) if nums[i] == True]
N = int(input())
prime_nums = getPrimaryNum_Eratos((N // 2) + 1)
# prime_nums_reverse = reversed(prime_nums)
# print(prime_nums)
answers = []
for prime_num in prime_nums:
if N % prime_num == 0:
while(N % prime_num == 0):
answers.append(prime_num)
N = N // prime_num
for num in answers:
print(num)
무엇이 문제일까 생각해보니 입력받는 값이 소수일 경우에 대해서는 생각을 하지 않았다는 것을 깨달을 수 있었습니다.
def getPrimaryNum_Eratos(N):
nums = [True] * (N + 1)
for i in range(2, len(nums) // 2 + 1):
if nums[i] == True:
for j in range(i+i, N, i):
nums[j] = False
return [i for i in range(2, N) if nums[i] == True]
N = int(input())
prime_nums = getPrimaryNum_Eratos(N + 1)
# prime_nums_reverse = reversed(prime_nums)
# print(prime_nums)
if N in prime_nums:
print(N)
else:
answers = []
for prime_num in prime_nums:
if N % prime_num == 0:
while(N % prime_num == 0):
answers.append(prime_num)
N = N // prime_num
for num in answers:
print(num)
정답! 시간이 조금 오래걸리긴했지만 맞았습니다!
이제 조금 더 효율적인 방법으로 짤 수 있을지 고민해보려합니다.
그럼 오늘은 여기까지!
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaeKJoon] 2004번: 조합 0의 개수 (Python) (0) | 2020.02.10 |
---|---|
[BaeKJoon] 1676번: 팩토리얼 0의 개수 (Python) (2) | 2020.02.09 |
[BaeKJoon] 10872번: 팩토리얼 (Python) (0) | 2020.02.09 |
[BaeKJoon] 2960번: 에라토스테네스의 체 문제 풀이 (Python) (0) | 2020.02.08 |
[BaeKJoon] 6588번: 골드바흐의 추측 문제 풀이 (Python) (0) | 2020.02.07 |
Comments