코드업 기초 100제 - 22.05.19

개발자 macan·2022년 5월 18일
0

개발 - 공부

목록 보기
22/28

오늘의 문제

59번 ~

알게 된 것

  • 비트단위 연산자
    입력 된 정수를 비트단위로 참/거짓을 바꾼 후 정수로 출력해보자.
    비트단위(bitwise)연산자 ~ 를 붙이면 된다.(~ : tilde, 틸드라고 읽는다.)

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

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

예시
a = 1
print(~a) #-2가 출력된다.

참고
컴퓨터에 저장되는 모든 데이터들은 2진수 형태로 바뀌어 저장된다.
0과 1로만 구성되는 비트단위들로 변환되어 저장되는데,
양의 정수는 2진수 형태로 바뀌어 저장되고, 음의 정수는 "2의 보수 표현"방법으로 저장된다.

양의 정수 5를 32비트로 저장하면,

5의 2진수 형태인 101이 32비트로 만들어져
00000000 00000000 00000000 00000101
로 저장된다.(공백은 보기 편하도록 임의로 분리)

32비트 형의 정수 0은
00000000 00000000 00000000 00000000

그리고 -1은 0에서 1을 더 빼고 32비트만 표시하는 형태로
11111111 11111111 11111111 11111111 로 저장된다.

-2는 -1에서 1을 더 빼면 된다.
11111111 11111111 11111111 11111110 로 저장된다.

이러한 내용을 간단히 표현하면, 정수 n이라고 할 때,

~n = -n - 1
-n = ~n + 1 과 같은 관계로 표현할 수 있다.

이 관계를 그림으로 그려보면 마치 원형으로 수들이 상대적으로 배치된 것과 같다.

질문 및 개선사항

64번 정수 3개 입력받아 제일 작은 값 출력하기

a,b,c = map(lambda x: int(x), input().split())
if a<b:
	if a<c:
     	print(a)
else :
	if b <c:
    	print(b)

위와 같이 풀었는데 다른 방식이 궁금

  • 3항 연산자
a, b, c = map(int, input().split()) 
print((a if a < b else b) if ((a if a < b else b) < c) else c)

65번 짝수면 출력하기

lambda를 사용해서 줄을 줄이고자 해보았는데 쓸데 없는 사용이었다.
차라리 리스트로 받아와서 리스트에서 짝수만 남기는 함수를 만들고
그걸 토대로 다른 줄로 프린트 하도록 하는게 나을 듯

  • 내가 만든거
a, b, c = map(int, input().split()) 
def print_even(x):
    if x % 2 == 0 :
        print(x)
print(a)
print(b)
print(c)
  • 리스트
ab_list = map(int, input().split())
filtered_list = list(filter(lambda x: x % 2 == 0, ab_list))
for num in filtered_list: print(num)
profile
개발자로 첫걸음

0개의 댓글