티스토리 뷰

[59]

📖question

입력 된 정수를 비트단위로 참/거짓을 바꾼 후 정수로 출력해보자.

예를 들어 1이 입력되었을 때 저장되는
1을 32비트 2진수로 표현하면 00000000 00000000 00000000 00000001 이고,
~1은 11111111 11111111 11111111 11111110 가 되는데 이는 -2를 의미한다.

Tip::

비트단위(bitwise)연산자 ' ~ ' 를 붙이면 된다.
(~ : tilde, 틸드라고 읽는다.)

**비트단위(bitwise) 연산자**
~(bitwise not),  
&(bitwise and),  
|(bitwise or),  
^(bitwise xor),
<<(bitwise left shift),  
>>(bitwise right shift)

✍️answer

n = int(input())
print(~n)

 

[60]

📖question

입력된 정수 두 개를 비트단위로 and 연산한 후 그 결과를 정수로 출력해보자.

예를 들어 3과 5가 입력되었을 때를 살펴보면
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 & 5 : 00000000 00000000 00000000 00000001
이 된다.

Tip::

  1. 비트단위(bitwise)연산자 &를 사용하면 된다.(and, ampersand, 앰퍼센드라고 읽는다.)
  2. 비트단위 and 연산은 두 비트열이 주어졌을 때, 둘 다 1인 부분의 자리만 1로 만들어주는 것과 같다.

✍️answer

a, b = map(int, input().split())
print(a & b)

 

[우리밋이 알려주는 Bonus 문제 (2)]

📖question

1개의 정수형 입력이 들어오면 비트 연산을 이용하여 '홀수'와 '짝수'를 판별하여라

Tip::

  1. '짝수'와 '홀수'를 리스트에 담고 짝수일 때는 '짝수'를, 홀수일 때는 '홀수'를 출력하게 한다.
  2. 0이 아닌 어떠한 정수일지라도 1과 비트단위 논리곱(&)을 수행하게 되면 1이 되는 특성을 이용한다.

✍️answer

n = int(input())
if(n & 1 == 1):
    print("홀수")
else:
    print("짝수")

 

[61]

📖question

입력된 정수 두 개를 비트단위로 or 연산한 후 그 결과를 정수로 출력해보자.

예를 들어 3과 5가 입력되었을 때를 살펴보면
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 | 5 : 00000000 00000000 00000000 00000111
이 된다.

Tip::

  1. 비트단위(bitwise) 연산자 |(or, vertical bar, 버티컬바)를 사용하면 된다.
  2. | 은 파이프(pipe)연산자라고도 불리는 경우가 있다.
  3. 비트단위 or 연산은 둘 중 하나라도 1인 자리를 1로 만들어주는 것과 같다.

이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서도 효과적으로 사용된다.

 

✍️answer

a, b = map(int, input().split())
print(a | b)

 

[62]

📖question

입력된 정수 두 개를 비트단위로 xor 연산한 후 그 결과를 정수로 출력해보자.

예를 들어 3과 5가 입력되었을 때를 살펴보면
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 ^ 5 : 00000000 00000000 00000000 00000110
이 된다.

Tip::

  1. 비트단위(bitwise) 연산자 ^(xor, circumflex/caret, 서컴플렉스/카릿)를 사용하면 된다.
  2. 주의 ^은 수학식에서 거듭제곱(power)을 나타내는 기호와 모양은 같지만, 파이썬에서는 전혀 다른 배타적 논리합(xor, 서로 다를 때 1)의 의미를 가진다.

이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서도 효과적으로 사용된다.

 

✍️answer

a, b = map(int, input().split())
print(a ^ b)  # 서로 다를 때 1

 

[우리밋이 알려주는 Bonus 문제 (2-2)]

📖question

문제 직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요.

단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.

제한사항

  1. v는 세 점의 좌표가 들어있는 2차원 배열입니다.
  2. v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
  3. 좌표 값은 1 이상 10억 이하의 자연수입니다.
  4. 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.

입력(1)

[[1,4], [3,4], [3,10]]

출력(1)

[1,10]

입력(2)

[[1,1], [2,2], [1,2]]

출력(2)

[2,1]

Tip::

  1. 나머지 한 점의 좌표는 기존에 좌표에서 없는 좌표이니, 1번만 입력된 좌표들을 찾아서 반환해주면 된다.
  2. XOR 연산을 통해 구현할 수도 있으며, 이 경우 코드의 실행 속도가 굉장히 빠르다.

 

✍️answer

list = [[1, 4], [3, 4], [3, 10]]

result = []
result.append(list[0][0] ^ list[1][0] ^ list[2][0])
result.append(list[0][1] ^ list[1][1] ^ list[2][1])
# XOR 연산자는 서로 다른 것을 출력한다.
# 0001 ^ 0011 ^ 0011 = 0001
# 0110 ^ 0110 ^ 1010 = 1010
print(result)

'Python > 코드업 기초 100제' 카테고리의 다른 글

11. 조건/선택실행구조  (0) 2022.05.15
10. 삼항연산  (0) 2022.05.15
8. 논리연산  (0) 2022.05.15
7. 비교연산  (0) 2022.05.15
6. 비트 시프트 연산  (0) 2022.05.14
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday