티스토리 뷰
1. 문제
정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
제한 사항
- num은 int 범위의 정수입니다.
- 0은 짝수입니다.
입력 출력 예시 |
![]() |
풀어보기
public String solution2(int num) {
String answer = "Even";
answer = ((num & 1) == 1)?"Odd":answer;
return answer;
}
1) 풀이
- Even(짝수) 문자열을 문자열 변수에 저장한다.
- 홀수는 ex) 3 일 때 이진 수로 변환하면 011이고 001과 & 비트 연산을 1이 출력됨으로 홀수 판별한다.
- 삼항 연산자를 통해 홀수면 answer에 Odd 문자열 저장, 아니면 Even 그대로 저장한다.
마무리
모듈러 연산 n%2 == 0으로 짝, 홀을 구해도 되지만, 비트 연산을 하면 조금 더 빨라지지 않을까?라는 생각을 하면서, 홀수는 항상 이진수로 변환하면 마지막 자리가 1 이기 때문에 1과 &(AND) 연산을 하면 비교 대상인 수의 이진수 마지막 자리가 1일 경우. 1이 되기 때문에 비트 연산 후 1인 값을 찾으면 보다 쉽게 홀수를 찾을 수 있다. 그래서 비트 연산을 사용하면서 기본적인 비트 연산을 조금 정리해보았다.
1) & (AND) : 두 수의 각 자릿수에 대해 둘 다 1일 경우 1로 변환
사용 예시) 짝, 홀수 비교 시 사용 가능
2) | (OR): 두 수의 각 자릿수가 하나만 1이면 1로 변환
사용 예시) 두 수 중 최댓값 추출(11(10), 3(10)) -> (1011(2) | 0011(2)) = 1011
3) ^ (XOR): 두 수의 각 자릿수가 다른 경우 1로 변환
사용 예시) 두 수가 같은 값인지 다른 값인지 비교(11(10) ^ 9(10)) -> (1011(2) ^ 0101) = 1010(2)
같은 값일 때는 1011(2) ^ 1011(2) = 0000 임으로, a^b==0 이면 같은 값임으로 조건으로 사용 가능
4) ~ (NOT): 각 자릿수를 반대로 변환
사용 예시) 양수 음수 반전 ex) ~10 -> -10
5) << (SHIFT- LEFT): 이진수의 각 자리를 왼쪽으로 N칸 밀고 제일 첫째 자리는 0으로 채우는 연산
사용 예시) A << B -> A* 2^B으로 사용 가능
6) >> (SHIFT-RIGHT): 이진수의 각 자리를 오른쪽으로 N 만큼 밀면서 사라지는 자릿수는 삭제
사용 예시) A >> B -> A/2^B으로 사용 가능
비트 연산자를 사용하면 비트 계산을 통해 조금 더 수를 비교할 때, 라이브러리만 사용할 필요 없이 간단하게 계산을 할 수 있게 되는 것 같다, 후에 기본적인 라이브러리들과 비트 연산의 속도가 얼마나 차이가 나는지 확인해봐야겠다.
참고
[알고리즘] java 비트연산 정리하기
기초개념인 java 비트연산을 정리해보도록 하겠습니다. 비트연산은 2개의 이진수에 대해서 연산하는 것을 말합니다. 컴퓨터는 이진수로 대화를 하고 있기 때문에 이 비트연산을 알아두는 것이
vmpo.tistory.com
'프로그래머스' 카테고리의 다른 글
[코딩 테스트 연습] 프로그래머스 : x 만큼 간격이 있는 n개의 숫자 (0) | 2022.05.19 |
---|---|
[코딩 테스트 연습] 프로그래머스 : 음양 더하기 (0) | 2022.05.19 |
[코딩 테스트 연습] 프로그래머스 : 없는 숫자 더하기 (0) | 2022.05.19 |
[코딩 테스트 연습] 프로그래머스 : 가운데 글자 가져오기 (0) | 2022.05.19 |
[코딩 테스트 연습] 프로그래머스 : 직사각형 별찍기 (0) | 2022.05.19 |