티스토리 뷰

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

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함