File tree Expand file tree Collapse file tree 1 file changed +69
-0
lines changed Expand file tree Collapse file tree 1 file changed +69
-0
lines changed Original file line number Diff line number Diff line change
1
+ """
2
+ 1. 입력받은 정수 n을 32비트 이진수로 바꾼다
3
+ 2. 이진수를 좌우로 뒤집는다 -> stack 활용
4
+ 2. 뒤집은 이진수의 정수값을 반환한다
5
+
6
+ 항상 32비트이므로 상수 시간, 상수 공간
7
+ TC: O(1)
8
+ SC: O(1)
9
+ """
10
+
11
+ class Solution :
12
+ def reverseBits (self , n : int ) -> int :
13
+ stack = []
14
+ while len (stack ) < 32 :
15
+ stack .append (n % 2 )
16
+ n //= 2
17
+
18
+ output , scale = 0 , 1 # 결과, 2^0 = 1 시작
19
+ while stack :
20
+ output += stack .pop () * scale
21
+ scale *= 2
22
+
23
+ return output
24
+
25
+ """
26
+ 비트 연산자
27
+
28
+ 쉬프트 연산자 - 정수 타입에만 사용 가능, 내부적으로 이진수로 작동
29
+ << 비트를 왼쪽으로 이동
30
+ x << 1 == x * 2
31
+ ex) 00001101 → 00011010
32
+
33
+ >> 비트를 오른쪽으로 이동
34
+ x >> 1 == x // 2
35
+ ex) 00001101 → 00000110
36
+
37
+ n & 1
38
+ 현재 n의 가장 오른쪽 비트 확인
39
+ n & 1이 1이면 홀수, 0이면 짝수
40
+ """
41
+
42
+ class Solution :
43
+ def reverseBits (self , n : int ) -> int :
44
+ stack = []
45
+ while len (stack ) < 32 :
46
+ stack .append (n & 1 ) # 마지막 비트 1이면 1, 0이면 0
47
+ n >>= 1 # %= 2 와 같은 효과, 오른쪽 쉬프트
48
+
49
+ output , scale = 0 , 1 # 결과, 2^0 = 1 시작
50
+ while stack :
51
+ output += stack .pop () * scale
52
+ scale <<= 1 # *= 2 와 같은 효과
53
+
54
+ return output
55
+
56
+ # stack 공간 절약 풀이
57
+ class Solution :
58
+ def reverseBits (self , n : int ) -> int :
59
+ output = 0
60
+ for _ in range (32 ):
61
+ output <<= 1 # 왼쪽 쉬프트
62
+ output |= (n & 1 ) # 논리 연산자 사용 (제일 마지막 비트가 1이라면 1, 0이라면 0)
63
+ n >>= 1
64
+ return output
65
+
66
+ # int, format 활용 풀이
67
+ class Solution :
68
+ def reverseBits (self , n : int ) -> int :
69
+ return int (format (n , "032b" )[::- 1 ], 2 )
You can’t perform that action at this time.
0 commit comments