[프로그래머스][LV.1] 짝수와 홀수 | python3
2025. 1. 15. 12:14ㆍ프로그래머스/LV.1
문제 링크: 짝수와 홀수
문제 설명
문제 설명
정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
제한사항
- num은 int 범위의 정수입니다.
- 0은 짝수입니다.
문제 풀이
2를 나눈 나머지가 0이면 짝수 아니면 홀수
내코드
def solution(num):
answer = 'Even'
if num%2:
answer='Odd'
return answer
더보기
다른사람풀이
def evenOrOdd(num):
return ["Even", "Odd"][num & 1]
-------------------------------------
def solution(num):
return "Even" if num&1 == 0 else "Odd"
비트연산자를 사용한 풀이이다.
num&1에서 num이 10진수여도 내부적으로 2진수로 바꾸어 각자리의 수를 비교한다.
1은 이진수로 0001이다. &은 둘다 1이어야 1을 반환한다. 이진수의 마지막자리가 1이면 홀수, 0이면 짝수이기 때문에 num&1를 수행하면 짝수는 0, 홀수는 1이 반환된다.
즉, num&1은 최하위비트(가장오른쪽)을 구하는 식이다.
근데 한가지 의문은 1이 0001이고, 만약 num이 3이라면 0011인데, 마지막은 1이 나오는 게 맞지만 앞의 0 3개는 어디로 가는거지??? 0이니 그냥 없는 걸로 치고 마지막 수만 반환하는 건가??
gpt한테 물어봤다.
비트 연산에서의 동작 원리
비트 연산은 같은 자릿수를 가진 두 숫자의 모든 비트 자리에 대해 비교를 수행합니다. 하지만 결과적으로 우리가 보는 출력값은 최종 **숫자 값(10진수로 변환된 값)**이에요. 따라서, 앞의 의미 없는 0들은 연산 결과에 영향을 미치지 않는다고 보면 됩니다.
예시: 3 & 1
입력 숫자의 비트 표현
- 3은 0011 (4비트로 표현)
- 1은 0001 (4비트로 표현)
비트 자리별 AND 연산 수행
- 첫 번째 비트: 0 & 0 = 0
- 두 번째 비트: 0 & 0 = 0
- 세 번째 비트: 1 & 0 = 0
- 네 번째 비트: 1 & 1 = 1
- 최종 결과는 0001 (이진수) = 1 (10진수).
의문: 앞의 0은 어디로 갔나?
앞의 0들은 결과값이 0일 뿐이에요. 비트 연산 결과는 4비트 전체에서 수행되었지만, 숫자의 값에는 영향을 미치지 않는 선행 0들은 단순히 무시됩니다.컴퓨터는 결과 값을 10진수로 변환할 때 의미 없는 선행 0은 표시하지 않습니다.0001(이진수)은 1(10진수)와 같기 때문에, 결과적으로 1만 반환됩니다.
한 가지 더 알아두면 좋은 점: 숫자의 비트 크기
컴퓨터 내부에서 숫자는 **32비트(또는 64비트)**로 저장됩니다. 즉, 실제로는 3이나 1도 다음과 같이 더 큰 비트 크기로 표현됩니다:
3: 00000000 00000000 00000000 00000011 (32비트)
1: 00000000 00000000 00000000 00000001 (32비트)
비트 연산은 모든 32비트 자리에서 수행되지만, 우리가 관심 있는 것은 결과 값이므로, 의미 없는 앞쪽의 0들은 출력하지 않습니다.
최종 정리
비트 연산은 입력 숫자의 전체 비트 자리에서 수행되며, 의미 없는 0은 결과 값으로 출력하지 않습니다.따라서 num & 1의 결과는 항상 **마지막 비트의 값(0 또는 1)**만 남아, 이를 10진수로 변환한 값이 반환됩니다.
그니까 결국 출력되는 것은 10진수이기 때문에 앞의 0들은 의미가 없어지는 거구나. 아무런 영향이 없으니까
위의 식은 리스트로 ['Evun','Odd']를 만들어서 인덱스 값으로 가져온 것이고 아래 식을 if문을 활용한 것이다.
'프로그래머스 > LV.1' 카테고리의 다른 글
[프로그래머스][LV.1] x만큼 간격이 있는 n개의 숫자 | python3 (0) | 2025.01.15 |
---|---|
[프로그래머스][LV.1] 평균 구하기 | python3 (0) | 2025.01.15 |
[프로그래머스][LV.1] 자릿수 더하기 | python3 (0) | 2025.01.15 |
[프로그래머스][LV.1] 약수의 합 | python3 (0) | 2025.01.15 |
[프로그래머스][LV.1] 문자열을 정수로 바꾸기 | python3 (0) | 2025.01.15 |