[PS] - 코딩 테스트용 파이썬 문법 정리 : 1편
알고리즘 / September 17, 2020
런타임 에러에 지치기도 하고, 내 진로에서 C++을 많이 사용할 것 같지는 않아 파이썬으로 알고리즘을 공부하기로 했다. 파이썬은 C++에 비해 시중에 나와 있는 풀이도 적고 느리지만, 그냥 왠지 마음이 갔다. 😄
본격적으로 공부를 시작하기 전에 자주 사용하는 문법을 정리해두면 좋을 것 같아 글로 남긴다.
1. 입출력
1. 1. 기본 입출력
파이썬은 기본적으로 모든 입력을 str 형으로 처리한다.
이외의 타입으로 입력을 받고 싶다면 int()
, float()
등 타입 캐스팅 함수를 사용해야 한다.
string = input() # 문자열 입력
num = int(input()) # 정수형 입력
floating = float(input()) # 실수형 입력
1. 2. 공백을 가지는 입출력
공백을 가지는 입출력은 이렇게 처리한다.
str1, str2 = input().split() # 공백을 두고 문자열을 입력받을 때
num1, num2 = map(int, input().split()) # 공백을 두고 정수를 입력받을 때
float1, float2 = map(float, input().split()) # 공백을 두고 실수를 입력받을 때
1. 3. 변수를 포함한 문자열 출력
변수가 포함된 문자열을 출력하는 여러 방법 중에서 format
키워드를 사용하는게 가장 편리하다고 생각한다.
message1 = "이 글은"
number1 = 5
print('{} {}번 수정되었습니다.'.format(message1, number1))
# 이 글은 5번 수정되었습니다.
2. 리스트 (배열)
2. 1. 리스트 생성
대괄호를 사용하는 방법 외에도 list()
함수를 사용해 리스트를 생성할 수 있다.
arr1 = [1, 2, 3, 4, 5] # [1, 2, 3, 4, 5] 생성
arr2 = list() # 빈 리스트 생성
arr2 = list([1, 2, 3, 4, 5]) # [1, 2, 3, 4, 5] 생성
2. 2. 리스트 초기화
- 간단한 1차원 배열 초기화
N = 5
arr = [0] * N # [0, 0, 0, 0, 0]
- 리스트 컴프리헨션을 활용한 초기화
리스트 컴프리헨션을 사용하면 조건문과 반복문을 활용해 리스트를 초기화할 수 있다.
# 1. row * col 크기의 2차원 리스트를 0으로 초기화하는 예제
row, col = map(int, input().split())
arr = [[0] * col for _ in range(row)]
# 2. 0, 1, 2, 3, ... N-2, N-1 로 리스트를 초기화하는 예제
N = int(input())
arr = [i for i in range(N)]
# 3. 0 ~ N-1 중 짝수 원소만으로 리스트를 초기화하는 예제
N = int(input())
arr = [i for i in range(N) if i % 2 == 0]
# 4. 0 ~ N-1의 제곱 값으로 리스트를 초기화하는 예제
N = int(input())
arr = [i * i for i in range(N)]
2. 3. 리스트 메서드
리스트를 다루는 여러 메서드가 존재하는데, 시간 복잡도가 O(N)인 메서드는 사용에 유의하자.
특히 remove()
나 insert()
처럼 자주 사용하는 메서드의 시간 복잡도가 큰 편이다.
메서드 | 설명 | 시간 복잡도 |
---|---|---|
.append() | 리스트에 원소를 삽입한다. | O(1) |
.insert(인덱스, 값) | 인덱스 위치에 원소를 삽입한다. | O(N) |
.remove(값) | 처음 등장하는 특정 값을 제거한다. | O(N) |
.count(값) | 특정 값의 수를 센다. | O(N) |
.reverse() | 리스트를 역순으로 뒤집는다. | O(N) |
.sort() | 리스트를 오름차순으로 정렬한다. (원본 리스트를 변경함) | O(NlogN) |
.sort(reverse = True) | 리스트를 내림차순으로 정렬한다. (원본 리스트를 변경함) | O(NlogN) |
3. 튜플
주로 다른 타입을 저장할 때 사용하는 튜플은 리스트와 비슷하지만 약간의 기능적인 차이가 있다.
- 튜플은 소괄호 ’()’ 를 사용한다.
- 튜플에 저장된 값은 변경할 수 없다.
arr = (1, "a", 213.0)
arr[0] = 13; # TypeError: 'tuple' object does not suppoer item assignment
4. 기타
4. 1. 문자의 아스키 코드 얻기
str1 = "A"
num1 = ord(str1)
print(num1) # 65
4. 2. 아스키 코드를 문자로 변환하기
num1 = 65
str1 = chr(num1)
print(str1) # 'A'
4. 3. 두 변수의 값 교체하기
num1 = 1
num2 = 10
num1, num2 = num2, num1
print(num1, num2) # 10, 1
우선은 배열의 초기화와 입출력에 초점을 맞췄는데, 코딩 팁이나 더 필요한 파이썬 문법이 있다면 추가해야겠다.
백준 골드가 되는 그날까지 파이팅! 😆