๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/LeetCode

[LeetCode] 371. Sum of Two Integers (๋‘ ์ˆซ์ž์˜ ํ•ฉ)

by yunamom 2022. 5. 24.
728x90
300x250

Sum of Two Integers

371. Sum of Two Integers

Medium


Given two integers a and b, return the sum of the two integers without using the operators + and -.

 

Example 1:

Input: a = 1, b = 2
Output: 3

Example 2:

Input: a = 2, b = 3
Output: 5

 

Constraints:

  • -1000 <= a, b <= 1000

๋ฌธ์ œ : ๋‘ ์ˆซ์ž ๋ฅผ ๋”ํ•œ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์‹œ์˜ค. ( * + , - ๊ธฐํ˜ธ ์‚ฌ์šฉํ• ์ˆ˜ ์—†์Œ)

์ฒ˜์Œ์— ๋”ํ•œ๊ฐ’์„ ๋ฆฌํ„ด๊นŒ์ง€๋งŒ ๋ณด๊ณ  ๋ญ์–Œ? ๋„ˆ๋ฌด์‰ฝ์ž๋‚˜! return a+b; ํ–ˆ๋Š”๋ฐ ๊ทธ๋ ‡๊ฒŒ ์‰ฌ์šธ๋ฆฌ๊ฐ€์—†์ง€..!

์ด๋ฌธ์ œ ์˜๋„๋Š” ๋น„ํŠธ(2์ง„์ˆ˜)์—ฐ์‚ฐ์ž๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”๊ฐ€ ์ด๋‹ค.

 

๋น„ํŠธ ์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž ์˜๋ฏธ ์‚ฌ์šฉ๋ฒ• ์˜ˆ์ œ ์„ค๋ช…
& AND x & y x = 00000011 = 3
y = 00000110 = 6
x & y → 00000010 = 2
๋‘ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ 1์ผ ๊ฒฝ์šฐ์—๋งŒ 1
| OR x | y x = 00000011 = 3
y = 00000110 = 6
x | y → 00000111 = 7
๋‘ ๋น„ํŠธ ์ค‘์—์„œ ํ•˜๋‚˜๋ผ๋„ 1์ด๋ฉด 1
^ XOR x ^ y x = 00000011 = 3
y = 00000110 = 6
x ^ y → 00000101 = 5
(x ^ y) ^ y → 00000011 = 3 
๋‘ ๋น„ํŠธ๊ฐ€ ๊ฐ™์œผ๋ฉด 0, ๋‹ค๋ฅด๋ฉด 1
~ NOT ~x x = 00000010 = 2
~x = 11111101 = 253
๊ฐ ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „, 0์ด๋ฉด 1, 1์ด๋ฉด 0
<< Left Shift x << 2 x = 00000001 = 1
x << 2 = 00000100 = 4
๋น„ํŠธ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ ํ•˜๋‚˜ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ๊ณฑํ•˜๊ธฐ 2
>> Right Shift x >> 2 x = 00000100 = 4
x >> 2 = 00000001 = 1
๋น„ํŠธ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ ํ•˜๋‚˜ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ๋‚˜๋ˆ„๊ธฐ 2
class Solution{
	int getSum(int a, int b) {
		while(b != 0) {
			int num = a & b;
			a ^= b;
			b = num << 1;
		}
		return a;
	}
}
public class GetSum {
	
	public static void main(String[]args) {
		// ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
		Solution test = new Solution();
		System.out.println(test.getSum(3,6));
		
	}
}
[RESULT]
9

[์„ค๋ช…]

1๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ
a : 3 [2์ง„์ˆ˜] 00000011
b : 6 [2์ง„์ˆ˜] 00000110

1๋ฒˆ์งธ a^b :5 
A : 5 [2์ง„์ˆ˜] 00000101 ( ๋‘ ๋น„ํŠธ๊ฐ€ ๊ฐ™์œผ๋ฉด 0, ๋‹ค๋ฅด๋ฉด 1)

1๋ฒˆ์งธ (a&b)<<1 :4
B : 4 [2์ง„์ˆ˜] 00000100 
(๋‘ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ 1์ผ ๊ฒฝ์šฐ์—๋งŒ 1 , ๋น„ํŠธ๋ฅผ ์™ผ์ชฝ์œผ๋กœ 1์นธ์ด๋™ )
์—ฌ๊ธฐ์„œ a๋Š” 3, b๋Š” 6์œผ๋กœ (a&b) = 00000010 , << 1 = 00000100 = 4 ๊ฐ€ ๋œ๋‹ค.
์•„๋ž˜์˜ ๋ฐ˜๋ณต๋ฌธ๋„ ๊ณผ์ •์ด ๋˜‘๊ฐ™๋‹ค.

2๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ
a : 5 [2์ง„์ˆ˜] 00000101
b : 4 [2์ง„์ˆ˜] 00000100
2๋ฒˆ์งธ a^b :1
A : 1 [2์ง„์ˆ˜] 00000001
2๋ฒˆ์งธ (a&b)<<1 :8
B : 8 [2์ง„์ˆ˜] 00001000

3๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ
a : 1 [2์ง„์ˆ˜] 00000001
b : 8 [2์ง„์ˆ˜] 00001000
3๋ฒˆ์งธ a^b :9
A : 9 [2์ง„์ˆ˜] 00001001 <- ๋ฆฌํ„ด๊ฐ’ 9 (b ๊ฐ€ 0์ด๋˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋˜๊ณ  a์˜ ๊ฐ’์ด ๋ฆฌํ„ด๋œ๋‹ค. )
3๋ฒˆ์งธ (a&b)<<1 :0
B : 0 [2์ง„์ˆ˜] 00000000

 

LeetCode ๊ณ ์ˆ˜๋‹˜(prashant404)์˜ ํ•œ์ค„ํ’€์ด๐Ÿ‘‡๐Ÿป ์™€์šฐ..

class Solution{
	int getSum(int a, int b) {	
		return (b==0)?a:getSum(a^b, (a&b) << 1);
	}
}

 

728x90
300x250

'Algorithm > LeetCode' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[LeetCode] Algorithm I - Day 2 Two Pointers  (0) 2022.10.26
[LeetCode] Algorithm I - Day 1 Binary Search  (0) 2022.10.26
[LeetCode] 35. Search Insert Position  (0) 2022.04.20
[LeetCode] 3. Longest Substring Without Repeating Characters  (0) 2022.04.18
[LeetCode] 58. Length of Last Word  (0) 2022.04.17

์ฝ”๋“œ