[Python 기초 100제] 6059~6076

Saemi Min·2023년 3월 6일
0

Python Grammer

목록 보기
7/8
post-thumbnail

문제

[기초 - 비트단위논리연산]

입력 된 정수를 비트단위로 참/거짓을 바꾼 후 정수로 출력해보자.
비트단위(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 과 같은 관계로 표현할 수 있다.

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

[기초 - 3항 연산]

입력된 두 정수(a, b) 중 큰 값을 출력하는 프로그램을 작성해보자.
단, 3항 연산을 사용한다.

a, b = input().split()
a = int(a)  #변수 a에 저장되어있는 값을 정수로 바꾸어 다시 변수 a에 저장
b = int(b)
c = (a if (a>=b) else b)
print(int(c))

참고
3개의 요소로 이루어지는 3항 연산은
"x if C else y" 의 형태로 작성이 된다.

  • C : True 또는 False 를 평가할 조건식(conditional expression) 또는 값
  • x : C의 평가 결과가 True 일 때 사용할 값
  • y : C의 평가 결과가 True 가 아닐 때 사용할 값

조건식 또는 값이 True 이면 x 값이 사용되고, True가 아니면 y 값이 사용되도록 하는 코드이다.

예를 들어
0 if 123>456 else 1
과 같은 표현식의 평가값은 123 > 456 의 비교연산 결과가 False 이므로 1이 된다.

예시 코드에서
a>=b 의 결과가 True(참) 이면 (a if (a>=b) else b)의 결과는 a가 되고,
a>=b 의 결과가 False(거짓)이면 (a if (a>=b) else b)의 결과는 b가 된다.

3항 연산을 중첩해(괄호로 묶는 등..) 이용하면 여러 값들을 순서대로 비교해 가장 큰/작은 값을 계산할 수 있다.

(a if a>b else b) if ((a if a>b else b)>c) else c

와 같은 계산식은 a, b, c 의 값 중 가장 큰 값으로 계산된다.

코드

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

#6060
n, b = map(int, input().split())
print(n&b)

#6061
n, b = map(int, input().split())
print(n|b)

#6062
n, b = map(int, input().split())
print(n^b)

#6063
n, b= map(int, input().split())
x=n if n>b else b
print(x)

#6064
n, b, c= map(int, input().split())
x=(n if n<b else b) if ((n if n<b else b)<c) else c
print(x)

#6065
res = list(map(int, input().split()))

for i in res:
    if i % 2==0:
        print(i)

#6066
res = list(map(int, input().split()))
for i in res:
    if i % 2==0:
        print("even")
    else:
        print("odd")
      
#6067
n=int(input())

if n<0 and n%2==0:
    print("A")
elif n<0 and n%2!=0:
    print("B")
elif n>0 and n%2==0:
    print("C")
elif n>0 and n%2!=0:
    print("D")


#6068
n=int(input())

if n>=90 :
  print('A')
elif n<90 and n>=70:
    print("B")
elif n<70 and n>=40:
    print("C")
else:
    print("D")

#6069
n=input()

if n=="A" :
  print('best!!!')
elif n=="B":
    print("good!!")
elif n=="C":
    print("run!")
elif n=="D":
    print("slowly~")
else:
    print("what?")

#6070
n=int(input())

if n//3==1:
    print("spring")
elif n//3==2:
    print("summer")
elif n//3==3:
    print("fall")
else:
    print("winter")

#6071
n=1

while(n!=0):
    n=int(input())
    if n!=0:
        print(n)

#6072
n=int(input())

while(n!=0):
    print(n)
    n-=1

#6073
n=int(input())

while(n>0):
    n-=1
    print(n)

#6074
c = ord(input())
t = ord('a') #정수값으로 바꿈
while t<=c :
  print(chr(t), end=' ') #chr() 유니코드 문자로 바꿈
  t += 1

#6075
n=int(input())
k=0
while(k<=n):
    print(k)
    k+=1

#6076
n=int(input())
for i in range(n+1):
    print(i)


profile
I believe in myself.

0개의 댓글