정확하게 잘라
낸다.(공백, 줄바꿈, 구분문자 등에 따라 정확하게 잘라낸다.)데이터형에 맞게 변환해 변수에 저장
한다. (정수, 실수, 문자, 문자열 등에 따라 정확하게 변환한다.)변수
를 이용해 값을 저장하고, 변수를 이용해 계산을 한다.필요한 형태로 만들어 출력
한다.(공백, 줄바꿈, 구분자, 등에 따라 원하는 형태로 만들어 출력한다.)print(?, ?, sep=':')
를 사용하면 콜론 :
기호를 사이에 두고 값을 출력
sep는 분류기호(seperator)를 의미
a,b = input().split(":")
print(a,b,sep=":")
# 10:57 ↲
# 10:57
+
이용하면 붙여서 출력front,back = input().split("-")
print(front+back)
# 890429-0909098 ↲
# 8904290909098
문자열 포맷팅
"%x"%a
: a에 저장되어있는 값을 16진수 소문자 형태 문자열로
a = int(input())
print("%x"%a) # 16진수(hexadecimal) 소문자 형태 문자열로 출력
print("%X"%a) # 16진수(hexadecimal) 대문자 형태 문자열로 출력
int(a, 16)
: 16진수 a를 10진수로 변환
"o%"%n
: n에 저장되어있는 값을 8진수(octal)
로
num = input()
a = int(num, 16)
print("%o" %a)
# 또는
a = int(input(), 16)
print("%o" %a)
# f ↲
# 17
ord(문자)
: 특정 한 문자에 해당하는 유니코드 정수를 반환
chr(정수)
: 하나의 정수를 인자로 받고 해당 정수에 해당하는 유니코드 문자를 반환
입력 값이 문자/문자열/정수/실수인지에 따라서 먼저 정확하게 변환시킨 다음에 사용하거나 계산하는 것이 좋다.
n = ord(input())
print(n)
# A ↲
# 65
c = int(input())
print(chr(c))
# 65 ↲
# A
문자를 받고 ➞ 유니코드 정수 반환 (n) ➞ 유니코드 정수+1을 유니코드 문자로 반환
영문자 'A'의 다음 문자는 'B'이고, 숫자 '0'의 다음 문자는 '1'
아스키문자표에서 'A'는 10진수 65로 저장되고 'B'는 10진수 66으로 저장된다. 따라서, 문자도 값으로 덧셈을 할 수 있다. 어떤 문자의 값에 1을 더하면 그 다음 문자의 값이 된다.
n = ord(input())
print(chr(n+1))
# a ↲
# b
w, n = input().split()
print(w * int(n))
# love 3 ↲
# lovelovelove
format(수, ".2f")
를 사용하면 원하는 자리까지의 정확도로 반올림 된 실수 값을 만들어 준다.
여기서 만들어진 값은 소수점 아래 3번째 자리에서 반올림한 값이다.
round(n, ndigit)
: n은 숫자, ndigit은 소수점 아래 ndigit+1번째 자리에서 반올림한다는 뜻이고 생략하면 가장 가까운 정수 반환
컴퓨터가 실수를 정확히 표현하지 못한다는 것을 기억하자
a = float(input())
print(format(a, ".2f"))
# 또는
print(round(f,2))
# 3.141592 ↲
# 3.14
정수를 2배로 곱하거나(*2) 나누어 (/2)계산해 주는 비트단위시프트연산자 <<, >>
를 이용할 수 있다.
컴퓨터 내부에는 2진수 형태로 값들이 저장되기 때문에, 2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로 지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 1/2로 줄어드는데,
왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되고, 오른쪽 비트시프트(>>)가 될 때에는 왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가되고, 가장 오른쪽에 있는 1비트는 사라진다.
n = 10
print(n<<1) # 10을 2배 한 값인 20
print(n>>1) # 10을 반으로 나눈 값인 5
print(n<<2) # 10을 4배 한 값인 40
print(n>>2) # 10을 반으로 나눈 후 다시 반으로 나눈 값인 2
정수 10의 2진수 표현은 1010
n = 10 과 같이 키보드로 입력받지 않고 직접 작성해 넣은 코드에서, 숫자로 시작하는 단어(식별자, identifier)는 자동으로 수로 인식된다.
python에서 실수 값에 대한 비트시프트 연산은 허용되지 않고 오류가 발생한다.
(실수 값도 컴퓨터 내부적으로는 2진수 형태로 저장되고 비트시프트 처리가 될 수 있지만, python 에서는 허용하지 않는다.)
a << b
a,b = map(int,input().split())
print(a << b)
# 1 3 ↲
# 8
a = bool(int(input()))
input( )
, int( )
, bool( )
순서로 not True
, not False
, not a
와 같은 계산이 가능not
예약어(reserved word, keyword)를 사용할 수 있다.프라임 '(작은 따옴표)
, 바(-)
, 문자 오른쪽 위에 c(여집합, complement)
등으로 표시한다. 모두 같은 의미not
, and
, or
이 있고, 불 값들 사이의 논리(not, and, or) 연산 결과도 마찬가지로 True 또는 False 의 불 값으로 계산 된다.""
or ''
는 False 이고, 나머지 문자열들은 True 로 평가된다.# 참거짓 바꾸기
n = bool(int(input()))
print(not n)
# 0 ↲
# True
# 1 ↲
# False
# 둘 다 참일 경우만 참 출력
n,m = map(int,input().split())
print(bool(n) and bool(m))
# 0 1 ↲
# False
# 1 2 ↲
# True
XOR(exclusive or, 배타적 논리합) 연산
이라고도 부른다.n,m = map(int,input().split())
a = bool(n)
b = bool(m)
print((a and (not b)) or ((not a) and b))
# 1 1 ↲
# False
# 1 0 ↲
# True
n,m = map(int,input().split())
a = bool(n)
b = bool(m)
print(((not a) and (not b)) or (a and b))
# 0 0 ↲
# True
# 0 1 ↲
# False
~
(bitwise not)&
(bitwise and)|
(bitwise or)^
(bitwise xor)<<
(bitwise left shift)>>
(bitwise right shift)참고
컴퓨터에 저장되는 모든 데이터들은 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 과 같은 관계로 표현할 수 있다.
구체적으로 설명하자면, 두 장의 이미지가 겹쳐졌을 때 색이 서로 다른 부분만 처리할 수 있다. 배경이 되는 그림과 배경 위에서 움직이는 그림이 있을 때, 두 그림에서 차이만 골라내 배경 위에서 움직이는 그림의 색으로 바꿔주면 전체 그림을 구성하는 모든 점들의 색을 다시 계산해 입히지 않고 보다 효과적으로 그림을 처리할 수 있게 되는 것이다. 비행기 슈팅게임 등을 상상해보면 된다.
# 비트단위로 NOT 연산
# 비트 단위로 1 -> 0, 0 -> 1로 바꾼 후 그 값을 10진수로 출력
n = int(input())
print(~n)
# 2 ↲
# -3
# 비트단위로 AND 연산
# 두 정수를 비트단위(bitwise)로 and 계산을 수행한 결과를 10진수로 출력한다.
n,m = map(int,input().split())
print(n & m)
# 3 5 ↲
# 1
# 비트단위로 OR 연산
# 두 정수를 비트단위(bitwise)로 or 계산을 수행한 결과를 10진수로 출력한다.
n,m = map(int,input().split())
print(n | m)
# 3 5 ↲
# 7
# 비트단위로 XOR 연산
# 두 정수를 비트단위(bitwise)로 or 계산을 수행한 결과를 10진수로 출력한다.
n,m = map(int,input().split())
print(n ^ m)
# 3 5 ↲
# 6
a,b,c = map(int,input().split())
print(c if ((b if a > b else a) > c) else (b if a > b else a))
# 3 -1 5 ↲
# -1
while True:
a = int(input())
if a == 0:
break
else:
print(a)
print(..., end=' ')
와 같이 작성하면 값 출력 후 공백문자 ' '를 출력한다. 즉, 마지막에 줄을 바꾸지 않고 빈칸만 띄운다.end='\n'
로 작성하거나 생략하면, 값을 출력한 후 마지막(end)에 줄바꿈(newline)이 된다.n = ord(input()) # 입력 받은 문자를 유니코드로 변환
for i in range(97,n+1): # 'a'가 97이므로 a 부터 입력받은 입력받은 n까지 출력하기
print(chr(i), end=' ')
# f ↲
# a b c d e f
n = ord(input())
for i in range(97,n+1):
print(chr(i))
# f ↲
# a
# b
# c
# d
# e
# f
num = int(input())
sum = 0
i = 0
while sum < num :
i = i + 1
sum = sum + i
print(i)
# 55 ↲
# 10
n = input() # 16진수 입력받고
a = int(n, 16) # 10진수로 변환
for i in range(1, 16):
print(('%X*'%a),('%X'%i),('=%X'%(a*i)),sep='')
# B ↲
# B*1=B
# B*2=16
# B*3=21
# B*4=2C
# B*5=37
# B*6=42
# B*7=4D
# B*8=58
# B*9=63
# B*A=6E
# B*B=79
# B*C=84
# B*D=8F
# B*E=9A
# B*F=A5
3
6
9
n = int(input())
for i in range(1,n+1):
if i % 10 == 3:
print("X",end=" ")
elif i % 10 == 6:
print("X",end=" ")
elif i % 10 == 9:
print("X",end=" ")
else:
print(i,end=" ")
# 9 ↲
# 1 2 X 4 5 X 7 8 X
#r,g,b = map(int,input().split())
# for x in range(0,r):
# for y in range(0,g):
# for z in range(0,b):
# print(x,y,z)
# z += 1
# y += 1
# x += 1
# print(r*g*b)
# 처음 작성한 코드 정답은 맞지만, 멍청한 코드ㅋ
# 반복문은 1씩 증가하면서 돈다.. 굳이 1을 안 더해도 된다고..
r,g,b = map(int,input().split())
for x in range(0,r):
for y in range(0,g):
for z in range(0,b):
print(x,y,z)
print(r*g*b)
# 2 2 2 ↲
# 0 0 0
# 0 0 1
# 0 1 0
# 0 1 1
# 1 0 0
# 1 0 1
# 1 1 0
# 1 1 1
# 8
w,h,b = map(int,input().split())
print(format(w*h*b/8/1024/1024,".2f"),"MB")
# 또는
result = w*h*b/8/1024/1024
print("%.2f"%result,"MB")
# 1024 768 24↲
# 2.25 MB
a,m,d,n = map(int,input().split())
for i in range(1,n):
a = a * m + d
print(a)
# 1 -2 1 8 ↲
# -85
x,y,z = map(int,input().split())
d = 1
while True:
if d % x == 0 and d % y == 0 and d % z == 0:
print(d)
break
else:
d += 1
# 3 7 9 ↲
# 63
num = int(input())
# 불린 출석번호들을 리스트에 저장
call = list(map(int,input().split()))
ls = []
# 각 출석번호(1~23)들이 불린 횟수 0으로 초기화한 리스트 생성
ls = [0 for _ in range(24)]
# 불린 번호들 횟수 증가시키기
for i in range(num):
ls[call[i]] += 1
# 출력
for i in range(1,24):
print(ls[i],end=" ")
# 10 ↲
# 1 3 2 2 5 6 7 4 5 9 ↲
# 1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
range(시작, 끝, 증감)
num = int(input())
call = list(map(int,input().split()))
# 9, 8, 7, 6,...0
for i in range(num-1,-1,-1):
print(call[i],end=" ")
# 10 ↲
# 1 2 3 4 5 6 7 8 9 0 ↲
# 0 9 8 7 6 5 4 3 2 1
num = int(input())
call = list(map(int,input().split()))
s = call[0]
for i in range(num):
if s > call[i]:
s = call[i]
print(s)
# 또는
num = int(input())
call = list(map(int,input().split()))
print(min(call))
# 10 ↲
# 10 4 2 3 6 6 7 9 8 5 ↲
# 2
# 2차원 배열로 바둑판 그리기
board = [[0 for _ in range(20)] for _ in range(20)]
n = int(input())
# x,y 좌표를 입력 받고 해당 좌표를 1로 변경
for i in range(n):
x,y = map(int,input().split())
board[x][y] = 1
# 바둑판 출력
for i in range(1,20):
for j in range(1,20):
print(board[i][j],end=" ")
# 줄 바꿈
print("")
# 바둑판 틀 만들기
board = [[]*19 for _ in range(19)]
# 입력된 바둑판 상황
for i in range(19):
board[i]=list(map(int,input().split()))
n = int(input())
for i in range(n):
x,y=map(int,input().split())
for j in range(19):
# 가로줄 반대로 바꾸기
if (board[x-1][j]==1):
board[x-1][j]=0
else:
board[x-1][j]=1
# 세로줄 반대로 바꾸기
if(board[j][y-1]==1):
board[j][y-1]=0
else:
board[j][y-1]=1
# 바둑판 상황 그리기
for i in range(19):
for j in range(19):
print(board[i][j],end=' ')
print()
w,h = map(int, input().split())
board = [[0]*h for _ in range(w)]
n = int(input())
for i in range(n):
l,d,x,y = map(int,input().split())
if d == 0:
# 가로일 때
# -1씩 빼줘야함
for j in range(l):
board[x-1][y-1+j] = 1
else:
# 세로일 때
for j in range(l):
board[x-1+j][y-1] = 1
# 격자판 출력
# range 주의
for i in range(w):
for j in range(h):
print(board[i][j],end=" ")
print("")
# 5 5 ↲
# 3 ↲
# 2 0 1 1 ↲
# 3 1 2 3 ↲
# 4 1 2 5 ↲
# 1 1 0 0 0
# 0 0 1 0 1
# 0 0 1 0 1
# 0 0 1 0 1
# 0 0 0 0 1
# 10*10크기의 미로 상자 틀
board = [[]*10 for _ in range(10)]
# 입력된 미로
for i in range(10):
board[i]=list(map(int,input().split()))
# 개미는 (2,2)에서 출발하니까 -1을 뺀 1,1
x, y = 1, 1
while True:
if (board[x][y] == 0):
board[x][y] = 9
elif (board[x][y] == 2):
board[x][y] = 9
break
if ((board[x][y+1] == 1 and board[x+1][y] == 1)):
break
if (board[x][y+1] != 1):
y = y + 1
elif (board[x+1][y] != 1):
x = x + 1
for i in range(10):
for j in range(10):
print(board[i][j], end=' ')
print()