LeetCode : 1290

Daehwi Kim·2020년 9월 6일
0

LeetCode

목록 보기
12/23
post-custom-banner

1290. Convert Binary Number in a Linked List to Integer


Given head which is a reference node to a singly-linked list. The value of each node in the linked list is either 0 or 1. The linked list holds the binary representation of a number.

Return the decimal value of the number in the linked list


Example


Solution


Solution 1. 빈리스트를 활용한 풀이

class Solution:
    def getDecimalValue(self, head: ListNode) -> int:
        # 링크드리스트의 값들을 빈리스트를 만들어 추가시켜주었다.
        linked = []
        while head is not None:
            linked.append(head.val)
            head = head.next
        linked = linked[::-1]

        # for문을 돌면서 비트연산을 하였다.
        result = 0
        for i in range(len(linked)):
            num = pow(2, i) * linked[i]
            result += num

        return result

Solution 2. 비트연산자를 활용한 풀이

class Solution:
    def getDecimalValue(self, head: ListNode) -> int:
        result = 0
        while head:
            result <<= 1
            result |= head.val
            head = head.next
        return result
  • 비트연산이란
    비트 연산(bitwise operation)은 한 개 혹은 두 개의 이진수에 대해 비트 단위로 적용되는 연산이다. -위키백과
  • 시프트연산자 << or >> (해당 방향쪽으로 변수의 값을 지정된 비트 수만큼 이동하는 연산자)
  • OR연산은 각 자릿수를 비교하여 둘 중 하나만 1이면 1로 연산한다.
a = 3
print('binary = ', bin(a), 'decimal = ', a)

a <<= 3
print('binary = ', bin(a), 'decimal = ', a)

a |= 2
print('binary = ', bin(a), 'decimal = ', a)

#binary =  0b11 decimal =  3
#binary =  0b11000 decimal =  24
#binary =  0b11010 decimal =  26
  • 시프트 연산은 결국 << 은 2의거듭제곱근을 곱하고 >> 은 2의 거듭제곱근을 나눈다. 3 << 3 = a * 2^3
  • | (or)연산은 주어진 수만큼 더하는 역활
profile
게으른 개발자
post-custom-banner

0개의 댓글