프로그래머스 LV1 짝수와 홀수(연습)

프로그래머스 LV1 짝수와 홀수(연습)

2021, Apr 07    

프로그래머스 lv1 짝수와 홀수(연습)

문제 설명

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

제한 조건

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

0은 짝수입니다.

입출력 예

num return
3 “Odd”
4 “Even”

이진 비트

비트논리 연산자 사용하기

  • AND, OR, XOR, NOT 연산을 하는 비트 논리 연산자
    1. & 비트 AND
    2. | 비트 OR
    3. ^ 비트 XOR
    4. ~ 비트 NOT

비트 논리 연산자는 각 자릿수를 연산하여 결과를 만든다.
이때 각 자릿수의 연산결과는 영향을 받지 않는다.


---------------------------------------------
#AND 연산자

1 1 0 1 (13) 
1 0 0 1 (9)

13 & 9
>>> 1 0 0 1 (9)
---------------------------------------------

둘다 1인 자릿릿수만 1, 나머지는 0이다.


---------------------------------------------
# OR 연산자

1 1 0 1 (13) 
1 0 0 1 (9)

13 | 9
>>> 1 1 0 1 (13)
---------------------------------------------

둘 중 하나라도 1이면 1이다.


---------------------------------------------
# XOR 연산자

1 1 0 1 (13) 
1 0 0 1 (9)

13 ^ 9
>>> '0100',  bin(13^9) = '0b100'
>>> 4

---------------------------------------------

둘 중 하나라도 1이면 1, 둘다 1이면 0


---------------------------------------------
# NOT 연산자

1 1 0 1 (13) 

~13  
>>> bin(~13) = '-0b1110' # The bitwise inversion of x is defined as -(x+1)
>>  -(0b1101)+1
>> (-0b1110)
---------------------------------------------

The bitwise inversion of x is defined as -(x+1)


풀이

# 내 풀이

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

solution(1)

% 2 == 0 2로 나눈 나머지가 0이면 "Even", 아니면 "Odd"


# 다른 사람 풀이. 이진 비트 활용

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

#아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : " + evenOrOdd(3))
# print("결과 : " + evenOrOdd(2))

1의 이진비트는 bin(1) = '0b1' 이다.
num이 홀수면 이진수로 바꿨을때 첫째 자릿수는 홀수 이고 짝수이면 짝수이다.
예: bin(3) = '0b11'
예를 들어 3 & 1 을 &, 즉 and 비트 연산을 해보면
3의 이진수 첫째자리는 1이고 1의 첫째자리도 1이다. and 연산의 결과는 1이다.
비트 연산자는 왼쪽으로는 0이 무한으로 있는거나 다름 없으므로
& 연산을 한 경우 첫째 자리를 제외한 나머지 자리는 전부 0이 된다.
즉 num & 1로 비트연산을 하게 되면 num이 짝수면 0, 홀수면 1을 리턴하게 된다.
예: bin(14 & 1) = '0b0', 0b0 = 0 0이면 홀수 이므로 “Even”, 1이면 짝수이므로 “Odd”를 인덱싱하여 리턴한다.


출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges