TIL - 시프트, 정렬 람다식

손찬호·2024년 4월 10일
0

TIL

목록 보기
13/21

시프트 연산자란?

이진법에서 자리를 이동할 때 쓰이는 연산자라고 보면 된다.

<<

이진법에서 자리를 왼쪽으로 한칸 이동시켜주는 연산자이다.
"숫자<<이동칸수숫자 << 이동칸 수"로 보면 된다.
결과값=숫자×2이동칸수결과값=숫자\times2^{이동칸 수}라고 보면 된다.

예를 들어 7<<2=722=287<<2 = 7*2^2=28

>>

이진법에서 자리를 오른쪽으로 한칸 이동시켜주는 연산자이다.
"숫자>>이동칸수숫자 >> 이동칸 수"로 보면 된다.
결과값=숫자÷2이동칸수결과값=숫자\div2^{이동칸 수}라고 보면 된다.

예를 들어 7>>2=7//22=17>>2 = 7//2^2=1
0b111>>2 = 0b1

시프트 연산자 원리

10진법 "2"에서 왼쪽으로 한 칸 이동하려면 ×10\times10을 하면 "20"이 된다.
2진법도 마찬가지로 ×2\times2를 하면 왼쪽으로 한칸 ÷2\div2를 하면 오른쪽으로 한칸
이동한다고 보면된다.

시프트 연산자 예시코드

# 입력값
x = 7
print(x)
print(bin(x))
print(x<<1)
print(bin(x<<1))
print(x>>1)
print(bin(x>>1))

# 결과값
7
0b111
14
0b1110
3
0b11

리스트 정렬 람다식

(a,b)꼴의 입력이 주어질 때
b 기준으로 오름차순으로 정렬하고 이후 a기준으로 오름차순을 하고 싶다면

import sys
input = sys.stdin.readline
import heapq

n = int(input())
meet = []
for _ in range(n):
    start, end = map(int,input().split())
    meet.append((start,end))
    
meet.sort()
print(meet)
print()
meet.sort(key=lambda x: (x[1],x[0]))
print(meet)

입력

11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14

출력

meet.sort()

[(0, 6), (1, 4), (2, 13), (3, 5), (3, 8), (5, 7), (5, 9), (6, 10), (8, 11), (8, 12), (12, 14)]

meet.sort(key=lambda x: (x[1],x[0]))

[(1, 4), (3, 5), (0, 6), (5, 7), (3, 8), (5, 9), (6, 10), (8, 11), (8, 12), (2, 13), (12, 14)]
profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글

관련 채용 정보