[PS] - 코딩 테스트용 파이썬 문법 정리 : 1편

알고리즘 / September 17, 2020

thumbnail

런타임 에러에 지치기도 하고, 내 진로에서 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

우선은 배열의 초기화와 입출력에 초점을 맞췄는데, 코딩 팁이나 더 필요한 파이썬 문법이 있다면 추가해야겠다.
백준 골드가 되는 그날까지 파이팅! 😆