[Programmers] Lv.1 <12937 짝수와 홀수> (python)

kkmjkim·2021년 7월 9일

programmers

목록 보기
1/2
post-thumbnail

문제 설명

정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.

제한 조건

  • num은 int 범위의 정수입니다.
  • 0은 짝수입니다.

입출력 예

numreturn
3"Odd"
4"Even"
출처: 프로그래머스 코딩테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/12937

나의 코드

def solution(num):
    return "Even" if num % 2 == 0 else "Odd"

저는 단순히 modulo 연산(%)을 통해 홀수인지 짝수인지 판별했습니다.
한 줄로 if-else 문을 처리하는 python의 삼항 연산자를 사용하면 간결하게 작성할 수 있습니다.

다른 코드

def solution(num):
    return ["Even", "Odd"][num & 1]

위 코드는 리스트의 index를 입력과 1의 AND 연산 결과로 사용했습니다.

만약 num 이 짝수라면 이진변환을 했을 때 마지막 자리가 0이기 때문에 num & 1 의 결과가 0이 되어 0번째 원소인 "Even"을 반환할 것이고, num 이 홀수라면 num & 1 의 결과가 1이 되어 1번째 원소인 "Odd"를 반환할 것입니다.

&는 AND 비트 연산을 한 것인데, 동작 방식을 간단히 살펴보면 아래와 같습니다.

>>> 3 & 6
2

두 수를 이진수로 변환합니다.
3 -> 11
6 -> 110

비트 단위로 AND 연산을 합니다.
202^0자리: 1 & 0 = 0
212^1자리: 1 & 1 = 1
222^2자리: 0 & 1 = 0

이진수로 010 이라는 결과가 나오는데, 출력은 자동으로 십진수로 변환되기 때문에 2가 출력된 것입니다.

따라서, 문제로 돌아가서, 홀수는 항상 202^0자리가 1이고 짝수는 0이기 때문에 1과 AND 비트 연산을 해줌으로써 간단하게 홀수인지 짝수인지 판별할 수 있음을 알 수 있습니다.

질문이나 오류 수정은 댓글로 남겨주세요!

profile
진지해지면 안되는데

0개의 댓글