728x90
반응형
SMALL
Programmers 레벨 0_코딩테스트 입문 문제 풀이
https://school.programmers.co.kr/learn/challenges/beginner?order=recent&page=1
코딩테스트 입문 | 프로그래머스 스쿨
코딩테스트에 처음 도전하는 사람들을 위한 입문 문제 모음. 쉬운 문제부터 하나씩 도전해 보면서 코딩테스트에 자신감도 붙이고 문제 해결 능력을 키워보세요!
school.programmers.co.kr
풀이 날짜 : 2023-09-29
소요 시간 : 63min
문제 설명
소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.
기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.
나의 풀이
def solution(a, b):
x = [i for i in range(2, a+1) if a%i == 0 and b%i == 0] # 공약수
if x != [] :
a, b = a//max(x), b//max(x)
answer = [i for i in range(2, b+1) if b%i == 0 and all(i % j for j in range(2, i))]
return 1 if answer == [2] or answer == [5] or answer == [2, 5] or b == 1 else 2
처음에 기약분수로 만들고, 분모의 소인수를 판별하는 식으로 풀었는데 일부 테스트 케이스를 통과하지 못해서 다른 방안을 구상했다.
다른 풀이
return 1 if a/b * 1000 % 1 == 0 else 2
제한조건을 활용한 방법이다.
from math import gcd
def solution(a, b):
b //= gcd(a,b)
while b%2==0:
b//=2
while b%5==0:
b//=5
return 1 if b==1 else 2
728x90
반응형
LIST
'Coding Study > Programmers (Python)' 카테고리의 다른 글
[프로그래머스/파이썬] Lv.0 문자열 밀기 (8') (0) | 2023.09.29 |
---|---|
[프로그래머스/파이썬] Lv.0 저주의 숫자 3 (19') (0) | 2023.09.29 |
[프로그래머스/파이썬] Lv.0 치킨 쿠폰 (21') (0) | 2023.09.29 |
[프로그래머스/파이썬] Lv.0 등수 매기기 (86') (0) | 2023.09.28 |
[프로그래머스/파이썬] Lv.0 로그인 성공? (3') (0) | 2023.09.28 |