코드업 Python 기초 100제 정리
C++을 공부했던 것처럼 CodeUp 기초 100제를 통해 Python 기본 문법을 공부했습니다.
PS를 하면서 Python을 써보고 싶다거나 다른 프로그래밍을 할 때, Python을 쓸 일이 많아질 거 같아 더 이상 미룰 수 없다고 생각했고, 지금이 최적의 타이밍이 아닌가 했습니다.
풀면서 배워두어야 할 문법들에 관련된 문제들로 정리 해두었습니다.
6005
print("\"Hello World\"")
큰 따옴표나 작은따옴표는 C++처럼 앞에 \(역슬래시)를 붙여주면 출력할 수 있습니다.
6011
n = float(input())
print(n)
파이썬에서 실수형은 float을 사용합니다. C++에서는 범위에 따라 double이나 long double을 사용할 일이 많았는데 파이썬은 없는 거 같군요.
6015
a, b = input().split()
a = int(a)
b = int(b)
print(a)
print(b)
파이썬에서 한 줄에 여러 정수를 입력받으려면 input().split()을 이용하여 입력받을 수 있습니다. 별다른 타입 변환 없이 받았기 때문에 a = int(a)를 통해 타입 변환을 해줍니다.
6016
a, b = input().split()
print(b, a)
줄 넘김 없이 출력하는 방법은 print에서 한번에 ,(콤마)를 통해 출력하는 방법이 있습니다. 공백 없이도 출력할 수 있지만 이는 다른 문제에서 나오기 때문에 넘어가겠습니다.
6018
a, b = input().split(":")
print(a, b, sep = ":")
input().split(":")는 :를 기준으로 잘라서 입력을 받겠다는 뜻입니다. 이전엔 비워뒀으니 공백이 디폴트 값이라는 것을 알 수 있습니다.
print(a, b, sep = ":")에서 sep는 separator를 뜻하고, 변수들 사이에 sep를 끼워 넣어 출력한다는 뜻입니다. 이전에도 비워두고 출력했을 때, 공백으로 구분되었으니 디폴트 값이 공백이었다는 것을 알 수 있습니다.
6022
s = input()
print(s[0:2], s[2:4], s[4:6])
[a:b]란 a에서 b - 1까지를 뜻합니다. (물론 사이에 공백은 없습니다.)
6027
n = int(input())
print('%x' %n)
10진수를 입력받아 16진수(소문자)를 출력할 땐 '%x'를 활용하여 출력할 수 있습니다. %x뒤엔 어떤 변수를 뜻하는지 알려주기 위해 %n을 적어둡니다.
대문자일 때는 '%X'로 적으면 되겠습니다.
6029
n = input()
n = int(n, 16)
print('%o' %n)
입력에서 몇 진수로 입력받거나 int형 변환을 할 때, 진수로 변환이 가능합니다. int형 변환에서 (바꾸는 수, 몇 진수)의 형태로 작성해주면 됩니다.
6030
n = ord(input())
print(n)
입력받아서 유니코드(10진수)로 변환하는 함수는 ord()입니다.
6031
c = int(input())
print(chr(c))
10진수를 입력받아 chr()를 통해 유니코드로 변환해줄 수 있습니다.
6036
w, n = input().split()
print(w * int(n))
정수*문자열 or 문자열*정수는 문자열을 정수번 반복했다는 뜻입니다.
6042
a = float(input())
print(format(a, '.2f'))
소수점을 몇 자리까지 정해서 출력하는 방법은 format함수를 사용하면 됩니다. .2f는 3번째 자리에서 반올림하여 2번째 자리까지 나타내겠다는 뜻입니다.
6052
n = int(input())
print(bool(n))
bool(n)은 n이라는 수가 True인지 False인지 판단하는 함수입니다. 0이 아니면 True, 0이면 False가 반환됩니다.
6053
n = bool(int(input()))
print(not n)
not 연산은 해당하는 값이 True라면 False, False라면 True를 반환합니다. 값을 not 연산시키는 게 아닌 논리 값을 돌려줍니다.
6056
a, b = input().split()
a = int(a)
b = int(b)
print(bool(a) ^ bool(b))
파이썬에서 XOR은 ^기호를 사용합니다.
물론 논리 값이 아닌 숫자에도 사용 가능합니다.
6059
n = int(input())
print(~n)
not과 ~(tilde)를 가끔 헷갈리기도 합니다. not은 논리 연산자 ~은 bitwise 연산자라고 생각하면 쉽습니다.
6063
a, b = input().split()
a = int(a)
b = int(b)
c = int(a if (a >= b) else b)
print(c)
Python에서 Ternary Operator를 나타내는 방법입니다.
=>> (True일 때 value) if (조건식) else (False일 때 value)
6074
c = ord(input())
t = ord('a')
while t <= c:
print(chr(t), end = ' ')
t += 1
앞서 다룬 개념이지만 이를 응용한 문제이기에 가져와봤습니다.
입력받은 값을 유니코드 정수 값으로 바꾸고, 정수 값보다 크거나 작은 값들을 모두 유니코드로 바꾸어(chr()) 출력합니다.
6081
n = int(input(), 16)
for i in range (1, 16):
print('%X'%n, '*%X'%i, '=%X'%(n * i), sep = '')
진수 입력 방법이나 출력 방법도 잊지 않기에 좋은 문제였습니다.
6093
n = int(input())
li = list(map(int, input().split()))
for i in range(n - 1, -1, -1):
print(li[i], end = ' ')
range(시작값, 끝값, 증감값)에 해당하는 parameter를 알고, range는 [시작, 끝) 임을 안다면 반대로 출력할 수도 있다는 걸 알게 됩니다.
6095
d = []
for i in range(0, 20):
d.append([]) # 리스트 안에 다른 리스트 추가
for j in range(0, 20):
d[i].append(0)
n = int(input())
for i in range(0, n):
x, y = input().split()
x = int(x)
y = int(y)
d[x][y] = 1
for i in range(1, 20):
for j in range(1, 20):
print(d[i][j], end = ' ')
print(end = '\n')
Python에서 2차원 배열을 선언하는 방법이 있습니다. 위와 같이 반복문을 통해 append를 사용하여 선언하는 방법이 있고, 아래와 같이 문법을 활용하여 선언하는 방법도 있습니다.
#declaration
d = [[0 for j in range(0, 20)] for i in range(0, 20)]
#print
for i in range(0, 20):
for j in range(0, 20):
print(d[i][j], end = ' ')
print(end = '\n')
확실히 한 줄로 짜는 게 더 깔끔합니다. 그리고, append 메서드는 C++ vector의 push_back과도 비슷하게 느껴집니다.
끝
간단하게나마 문법을 배웠지만 PS를 하면서 필요한 문법, 여러 패키지의 사용(numpy, pandas, matplotlib 등)과 같은 여러 가지 상황에서 더 공부를 해야 합니다.