-
23. 콜라츠 추측코딩 테스트/Level 1 2019. 10. 21. 23:06반응형
https://programmers.co.kr/learn/courses/30/lessons/12943
파이썬
def solution(num): count = 0 while count < 500 and num > 1: count += 1 if num % 2: num = num * 3 + 1 else: num = num / 2 return -1 if count == 500 else count
3항 연산자를 쓰면..
def solution(num): count = 0 while count < 500 and num > 1: count += 1 num = (num * 3 + 1) if (num % 2) else (num / 2) return -1 if (count == 500) else count
테스트 1 〉 통과 (0.07ms, 10.7MB) 테스트 2 〉 통과 (0.09ms, 10.7MB) 테스트 3 〉 통과 (0.08ms, 10.6MB) 테스트 4 〉 통과 (0.06ms, 10.7MB) 테스트 5 〉 통과 (0.15ms, 10.6MB) 테스트 6 〉 통과 (0.06ms, 10.7MB) 테스트 7 〉 통과 (0.16ms, 10.7MB) 테스트 8 〉 통과 (0.06ms, 10.7MB) 테스트 9 〉 통과 (0.06ms, 10.7MB) 테스트 10 〉 통과 (0.15ms, 10.7MB) 테스트 11 〉 통과 (0.15ms, 10.7MB) 테스트 12 〉 통과 (0.06ms, 10.7MB) 테스트 13 〉 통과 (0.03ms, 10.7MB) 테스트 14 〉 통과 (0.07ms, 10.7MB) 테스트 15 〉 통과 (0.07ms, 10.7MB) 테스트 16 〉 통과 (0.07ms, 10.8MB)
짝수를 2로 나누는 부분은 소수점 이하가 나올 이유가 없다.
이럴 땐 정수부분까지만 계산하는 // 를 사용하면 속도가 빨라진다.def solution(num): count = 0 while count < 500 and num > 1: count += 1 num = (num * 3 + 1) if (num % 2) else (num // 2) return -1 if (count == 500) else count
테스트 1 〉 통과 (0.05ms, 10.7MB) 테스트 2 〉 통과 (0.06ms, 10.8MB) 테스트 3 〉 통과 (0.05ms, 10.7MB) 테스트 4 〉 통과 (0.05ms, 10.7MB) 테스트 5 〉 통과 (0.10ms, 10.7MB) 테스트 6 〉 통과 (0.05ms, 10.8MB) 테스트 7 〉 통과 (0.10ms, 10.7MB) 테스트 8 〉 통과 (0.06ms, 10.7MB) 테스트 9 〉 통과 (0.04ms, 10.7MB) 테스트 10 〉 통과 (0.11ms, 10.7MB) 테스트 11 〉 통과 (0.09ms, 10.7MB) 테스트 12 〉 통과 (0.04ms, 10.6MB) 테스트 13 〉 통과 (0.03ms, 10.7MB) 테스트 14 〉 통과 (0.05ms, 10.6MB) 테스트 15 〉 통과 (0.05ms, 10.8MB) 테스트 16 〉 통과 (0.04ms, 10.7MB)
자바스크립트
function solution(num) { let count = 0 while (count < 500 && num > 1) { count++ num = (num % 2) ? (num * 3 + 1) : (num / 2) } return (count == 500) ? -1 : count }
자바
while만 쓰기 심심해서 for로...
class Solution { public int solution(int num) { long longNum = num; int count = 0; for (; count < 500 && longNum > 1; count++) { longNum = (longNum % 2 == 0) ? longNum / 2 : longNum * 3 + 1; } return (count == 500) ? -1 : count; } }
고
고에선 3항 연산자가 없죠...
func solution(num int) (count int) { for count = 0; num > 1 && count < 500; count++ { if num%2 == 0 { num /= 2 } else { num = num*3 + 1 } } if count == 500 { count = -1 } return }
코틀린
class Solution { fun solution(num: Int): Int { var longNum = num.toLong() var count = 0 while (count < 500 && longNum > 1) { count++ longNum = if (longNum % 2 == 0L) longNum / 2 else longNum * 3 + 1 } return if (count == 500) -1 else count } }
C#
public class Solution { public int solution(int num) { int i = 0; long longNum = num; for (; i < 500 && longNum != 1; i++) longNum = (longNum % 2 == 0) ? longNum / 2 : longNum * 3 + 1; return (longNum == 1) ? i : -1; } }
반응형