[Lv. 0] 유한소수 판별하기프로그래머스/Level 02023. 3. 29. 14:43
Table of Contents
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120878
난이도 : Level.0
언어 : Kotlin
문제 설명 :
소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.
- 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.
제한 사항 :
- a, b는 정수
- 0 < a ≤ 1,000
- 0 < b ≤ 1,000
입출력 예 :
a | b | result |
7 | 20 | 1 |
11 | 22 | 1 |
12 | 21 | 2 |
다른사람의 풀이 :
class Solution {
fun solution(a: Int, b: Int): Int {
var newB = b / gcd(a, b)
while (newB != 1) {
newB /= if (newB % 2 == 0) {
2
} else if (newB % 5 == 0) {
5
} else {
return 2
}
}
return 1
}
private fun gcd(a: Int, b: Int): Int {
return if (b == 0) {
a
} else {
gcd(b, a % b)
}
}
}
문제 풀지 못했다...
기존에 아래와 같은 코드로 시도 했으나 몇 개의 테스트 케이스에서 통과하지 못하였고 고민 끝에 포기하고 다른 사람의 풀이를 확인했다..
class Solution {
fun solution(a: Int, b: Int): Int {
var answer: Int = b
var cnt = 2
var tempList: IntArray = intArrayOf()
while (answer > 1) {
if (answer % cnt == 0) {
tempList += cnt
answer /= cnt
} else {
cnt++
}
}
return if (tempList.contains(2) || tempList.contains(5)) {
if (tempList.filterNot { it == 2 || it == 5 || it == b }.isNotEmpty()) return 2
1
} else {
2
}
}
}
'프로그래머스 > Level 0' 카테고리의 다른 글
[Lv. 0] 평행 (0) | 2023.03.31 |
---|---|
[Lv. 0] 겹치는 선분의 길이 (0) | 2023.03.29 |
[Lv. 0] 특이한 정렬 (0) | 2023.03.29 |
[Lv. 0] 등수 매기기 (0) | 2023.03.28 |
[Lv. 0] 로그인 성공? (0) | 2023.03.28 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!