ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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",
        }
    }
    반응형
Designed by Tistory.