티스토리 뷰
5월 챌린지 - 4일차 입니다.
연휴 여서 1~2일차 빼먹고.. 3일차부터 하고 있네요 ㅠㅠ
1. 문제 - Number Complement
문제는 다음과 같습니다.
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
양의 정수가 주어지고 출력은 주어진 수의 complement number로 출력합니다.
complement strategy는 주어진 양의 정수의 이항 표현을 뒤집는 것이다.
그래서 예제를 보면
The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
5를 이진수로 표현하면 101이고 이것을 0->1, 1->0으로 변경하면 2가 된다.
2. 풀이
풀이.1 Integer의 BinaryString 변환을 활용하기.
public int findComplement(int num) {
// 2진수로 변경하기
String numStr = Integer.toBinaryString(num);
// 2진수의 길이 만큼 변경
StringBuilder sb = new StringBuilder();
for(int i=0; i<numStr.length(); i++) {
sb.append((numStr.charAt(i) == '0' ? 1 : 0));
}
return Integer.parseInt(sb.toString(), 2);
}
Java에서는 Integer를 BinaryString으로 변경이 가능하고 String에 있는 숫자들을 1->0, 0->1로 변경해서 마지막으로 Integer의 parseInt를 통해 2진수를 10진수로 변경하는 방법으로 풀 수 있습니다.
풀이.2 비트 연산 활용하기
public static int findComplement(int num) {
int cp = num;
int sum = 0;
while(num > 0) {
// num의 자리수 만큼 이진수에 1로 채운 숫자를 생성
sum = (sum << 1) + 1;
// 자리수 확인
num >>= 1;
}
return sum - cp;
}
비트 연산을 활용하는 방법입니다.
주어진 num의 2진수 자리수만큼 1로 채운 숫자를 생성하고 그 수에 num을 빼서 정답을 출력하는 방법입니다.
풀이1 보다 빠르며 자리수가 n이라면 O(n) 만큼 시간이 걸리는 방법입니다.
예를 들면 5의 이진수는 101 이기 때문에 3자리를 모든 채운 111 바로 7를 sum으로 구하고 7-5를 하여 2를 구하는 풀이 방법 입니다.
111 - 101 = 010
'알고리즘 > LeetCode 공부' 카테고리의 다른 글
[LeetCode] Java - Majority Element 풀이 방법 (0) | 2020.05.07 |
---|---|
[LeetCode] Java - First Unique Character in a String (0) | 2020.05.05 |
[LeetCode] Java - Maximal Square (0) | 2020.04.30 |
[LeetCode] Java - Last Stone Weight (0) | 2020.04.12 |
[Leet Code] Java - Counting Elements (0) | 2020.04.10 |
- Total
- Today
- Yesterday
- Java leetcode
- k8s metrics-server running
- vscode
- GPT서비스
- k8s metrics-server
- LeetCode 풀이
- 지도학습
- React 프로젝트 생성
- Component
- CHATGOT
- 파이썬 numpy
- LeetCode 30일 챌린지
- react
- LeetCode 알고리즘 공부
- 노드
- GPTGOT
- 30 Day LeetCode Challenge
- numpy
- Node
- 에라토스테네스
- LeetCode 5월 챌린지
- git
- 파이썬
- Java
- 리엑트
- 버츄얼스튜디오코드
- 머신러닝
- 퍼셉트론
- Python
- 넘파이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |