들어가며
코딩테스트를 준비하면서 "당연히 알고 있었어야 했는데" 하고 뒤늦게 깨달은 Python 문법과 팁들을 정리했습니다. 같은 고민을 하는 분들께 도움이 되길 바랍니다.
1. 기본 문법에서 놓치기 쉬운 것들
소숫점 처리
- round(n, count)로 반올림하는 건 알았지만, :.3f 같은 형식 지정자는 f-string의 {} 안이나 format()에서만 사용 가능하다는 걸 몰랐습니다.
조건문 구조
- if-elif-else에서 else가 필수라고 생각했는데, 사실 선택사항입니다.
역방향 순회
- range(start, end, step)의 step에 음수를 주면 역방향도 가능합니다.
- 예: range(5, 0, -1) → 5, 4, 3, 2, 1
올림 계산 팁
- math.ceil() 없이도 올림 가능: (remain + speed - 1) // speed
- 음수 내림으로 올림 효과: -((93 - 100) // speed)
2. 리스트 다루기의 핵심
리스트 컴프리헨션
처음엔 어렵게 느껴졌지만, 익숙해지면 코드가 훨씬 간결해집니다.
# 기본 구조
new_list = [표현식 for 변수 in 시퀀스]
# 예: 모든 요소 2배로
arr = [1, 2, 3, 4]
new_arr = [x * 2 for x in arr] # [2, 4, 6, 8]
# 0으로 초기화
zeros = [0 for i in range(10)]
2차원 배열 입력받기
- 리스트 컴프리헨션으로 2차원 배열 받을 때는 list()로 감싸야 합니다.
arr = [list(map(int, input().split())) for _ in range(n)]
- 감싸지 않으면 map 객체의 리스트가 됩니다.
유용한 메서드들
- sorted() vs list.sort(): 전자는 새 리스트 반환(원본 유지), 후자는 원본 수정
- pop(인덱스): 요소 인출하며 제거 (기본값은 마지막 요소)
- arr[::-1]: 배열을 뒤에서부터 순회
3. 입력 처리 최적화
빠른 입력
- 입력 길이가 길 때는 sys.stdin.readline() 사용
- input() 대신 사용하면 시간 단축 가능
한 줄로 리스트 입력받기
list(map(자료형, input().split()))
4. 문자열 처리
- upper(), lower(): 대/소문자 변환
- strip(): 공백 제거
- ''.join(리스트): 리스트를 문자열로 결합
- in 연산자: 포함 관계 확인
5. 유용한 내장 함수
zip()
- 두 리스트를 쌍으로 묶어줍니다.
a = [1, 2, 3]
b = [4, 5, 6]
list(zip(a, b)) # [(1, 4), (2, 5), (3, 6)]
map()
- 리스트 일괄 형변환에 필수
map(int, ['1', '2', '3'])
마치며
이 내용들은 대부분 "알고는 있었지만 실전에서 써본 적 없던" 것들이었습니다. 특히 리스트 컴프리헨션과 입력 최적화는 코딩테스트에서 시간을 크게 절약해줍니다. 여러분의 코테 준비에도 도움이 되길 바랍니다!
'Programming > Python' 카테고리의 다른 글
| Python - 변수와 자료형 (4) | 2024.11.14 |
|---|