-
1. 짝수와 홀수코딩 테스트/Level 1 2019. 10. 2. 18:12반응형
https://programmers.co.kr/learn/courses/30/lessons/12937
문제는 위 링크를 참고하세요.
파이썬
if 문을 사용해도 되지만
def solution(num): if num % 2 == 1: return 'Odd' else: return 'Even'
def solution(num): if num % 2: # 0은 False 입니다. return 'Odd' else: return 'Even'
3항 연산자를 쓰면 더욱 깔끔하게 코딩할 수 있습니다.
(3항 연산자의 if else 사이의 괄호는 읽기 편하라고 넣어 봤습니다.)def solution(num): return 'Odd' if (num % 2) else 'Even'
딕셔너리를 이용할 수도 있습니다.
def solution(num): return {0: 'Even', 1: 'Odd'}[num % 2]
나누기보다 비트 연산이 일반적으로 더 빠르죠...
2진수 0001 과 and 연산을 하면 홀수만 1이 되고 어떠한 짝수라도 0이 됩니다.
11010010 : 짝수
00000001 : and 연산을 하면...
00000000 : 결과11010011 : 홀수
00000001 : and 연산을 하면...
00000001 : 결과def solution(num): return {0: 'Even', 1: 'Odd'}[num & 1]
딕셔너리 말고 리스트로 해도 되죠..
리스트보다 튜플이 일반적으로 더 효율적이죠.def solution(num): return ('Even', 'Odd')[num & 1]
PEP 위반이지만 람다를 이용할 수도 있죠...
solution = lambda num: ('Even', 'Odd')[num & 1]
자바스크립트
괄호가 없으니 읽기 불편하죠?
function solution(num) { return num % 2 ? 'Odd' : 'Even'; }
자바
괄호를 넣어봤습니다.
자바에서는 num%2가 0일 때 False로 변환해주지 않기 때문에 == 를 사용해야 합니다.
다른 언어보다 조건문이 길죠? '()'가 없으면 읽기 더욱 불편해집니다.
class Solution { public String solution(int num) { return (num % 2 == 0) ? "Even" : "Odd"; } }
고
고 언어에는 3항 연산자가 없습니다. if문과 겹치기 때문이랍니다. 더 빠른 컴파일을 위해서일까요?
func solution(num int) string { if num%2 == 0 { return "Even" } return "Odd" }
코틀린
코틀린은 if 문 자체가 3항 연산자입니다. 와우~!
class Solution { fun solution(num: Int): String { return if(num % 2 == 0) "Even" else "Odd" } }
코틀린은 함수의 시그니쳐에 리턴 문을 작성할 수 있습니다. 와우~!
class Solution { fun solution(num: Int): String = if (num%2==0) "Even" else "Odd" }
이때 타입 유추가 가능하면 타입을 생략할 수 있습니다. 와우~!
class Solution { fun solution(num: Int) = if (num%2==0) "Even" else "Odd" }
C#
C#은 Int 형에서 Bool 형으로 암시적 변환을 허용하지 않습니다.
public class Solution { public string solution(int num) { return (num % 2 == 0) ? "Even" : "Odd"; } }
C# 6.0 부터는 '식 본문 멤버'가 생겨 간단하게 쓸 수 있습니다.
public class Solution { public string solution(int num) => (num % 2 == 0) ? "Even" : "Odd"; }
파이썬에서 딕셔너리를 이용했던 것처럼 enum 형을 이용해 볼 수도 있겠지만
C#에서는 파이썬과 달리 num = -5 면 num % 2 == -1 입니다.물론 ABS를 이용하면 되겠지만 이미 깔끔한 맛도 없고...public class Solution { enum EvenOrOdd { Even, Odd } public string solution(int num) { return $"{(EvenOrOdd)(num % 2)}"; } }
DART
String solution(int num) { if (num % 2 == 0){ return 'EVEN'; } return 'ODD'; }
String solution(int num) { return num % 2 == 0 ? 'EVEN' : 'ODD'; }
SWIFT
func solution(_ num:Int) -> String { return num % 2 == 0 ? "Even" : "Odd" }
RUST
fn solution(s: i32) -> &'static str { match s % 2 { 0 => "Even", _ => "Odd", } }
반응형