/date. 24.09.01.
- 저자
- 박경록
- 출판
- 골든래빗(주)
- 출판일
- 2023.11.15
'코딩 테스트 합격자 되기: 파이썬 편'을 읽으면서 파이썬을 이용한 코딩 테스트에 도전해보려고 합니다. 기초적인 이론에 대해 공부한 내용을 여기에 기록하고, 실제로 코딩 테스트 문제를 풀며 공부한 내용은 또 다른 카테고리에 기록해 둘 예정입니다. 그러니 틀린 내용이 있다면 댓글로 알려주세요. 코테 고수가 되는 그날까지 화이팅...!
코딩테스트 필수 문법
빌트인 데이터 타입
언어 자체에서 제공하는 데이터 타입인 빌트인 데이터 타입(정수형, 부동소수형, 문자열 등)과 컬렉션 데이터 타입(리스트, 튜플, 셋, 딕셔너리 등)으로 데이터 타입이 나뉩니다. 그중에서도 빌트인 데이터 타입을 먼저 살펴보겠습니다.
📌 정수형
a = 13
b = 14
print(a/b) #나누기(소수점 포함): 3.25
print(a//b) #나누기(소수점 제외): 3
print(a%b) #나머지: 1
print(abs(-a)) #절대값: 13
print(a*b) #a의 b제곱: 28561
- 정수형 비트 연산
a = 13
b = 4
print(a&b) #AND: 4
print(a | b) #or: 13
print(a^b)#XOR: 9
print(~a) #NOT: -14
print(a<<2) #왼쪽 시프트(a * 2^2): 52
print(a>>1) #오른쪽 시프트(a를 2^1로 나눈 것과 동일): 6
📌 부동소수형
print(10.0 % 3.2) #0.4가 아님!
위의 코드를 입력하면 값이 0.4가 아니라 0.399999999947처럼 나옵니다. 왜 이러는 걸까요? 파이썬은 float data를 이진법으로 표현하기 때문입니다. 이러한 현상을 엡실론epsilon이라고 합니다. float 데이터를 다룰 때는 항상 엡실론을 고려하여야 예외 발생을 대비할 수 있습니다.
import sys
#엡실론 출력
print(sys.float_info.epsilon)
#부동소수점 수의 오차 검사
a = 0.1 + 0.1 + 0.1
b = 0.3
print(a-b) #0이 아님
if abs(a-b) < sys.float_info.epsilon
print("a와 b는 같은 값입니다.")
else:
print("a와 b는 다른 값입니다.")
컬렉션 데이터 타입
컬렉션 데이터 타입은 데이터의 수정 가능 여부에 따라 변경할 수 있는 객체(mutable object)와 변경할 수 없는 객체(immutable object)로 나뉩니다.
📌 mutable object
리스트는 시퀀스가 존재합니다. 따라서 인덱싱과 슬라이싱이 가능한 것이 특징입니다.
인덱싱은 인덱스로 원소에 접근하는 것을 의미합니다.
my_list.append(6)
#my_list에 6이라는 값 추가
#리스트의 가장 끝에 추가
슬라이싱은 범위(a이상 b미만)를 지정해 값을 가져올 수 있습니다.
my_list = [1,2,3,4,5]
print(my_list[0:2]) #[1,2]
print(my_list[1:]) #[2,3,4,5]
print(my_list[3:4]) #[4]
print(my_list[-4 : -2]) #[2,3]
딕셔너리는 key-value쌍 테이블로 구현되는 것이 특징입니다.
my_dict={}
my_dict["apple"] = 1
my_dict["banana"] = 2
my_dict["orange"] = 3
print(my_dict) #{'apple':1, 'banana':2, 'orange':3}
검색, 수정, 삭제 등이 가능합니다.
#검색
key = "apple"
if key in my_dict:
value = my_dict[key]
print(f"{key}:{value}")
else:
print("검색 결과가 없습니다.")
#수정
my_dict["banana"] = 4
#삭제
del my_dict["orange"] #키가 없는 경우를 대비한 예외 처리 필요
📌immutable object
변경할 수 없는 객체는 말 그대로 생성 후 삽입, 삭제 등의 변경이 불가능합니다.
튜플은 초기화 이후 사용할 수 있습니다. 삽입, 삭제는 불가능하지만 인덱싱과 슬라이싱은 가능하고, 그 문법은 리스트와 동일합니다. 값이 변경되지 않아야 하는 데이터에 사용하여 실수를 방지할 수 있습니다.
my_tuple = (1,2,3) #()로 초기화
문자열은 큰/작은따옴표로 감싸서 사용할 수 있습니다. 한 가지 특징은 추가 및 삭제가 가능하다는 것인데, 기존 객체 자체를 추가/삭제하는 것이 아니라 새로운 객체를 반환하는 것입니다. 예를 들어 string = "He"라는 문자열을 만들었습니다. 그리고 나서 string += "llo"라는 코드를 작성하였다면, string은 He를 참조하는 것이 아닌 Hello를 참조하여 저장하게 됩니다. 수정 또한 가능합니다. replace()를 활용하여 찾을 문자열과 변경할 문자열을 인수로 받아 수정합니다. 예를 들어 string = string.replace("l", "")라고 한다면 l을 찾아 모두 삭제하라는 의미가 됩니다.
함수는 아래와 같이 정의합니다. 그리고 정의한 함수를 호출하여 사용하면 됩니다.
def function_name(param1, param2, param3, ... , paramN)
#내용
return result
람다식은 익명함수를 만드는 데 사용됩니다. 아래와 같이 정의할 수 있습니다.
lambda x, y : x+y
람다식을 사용하는 방법은 크게 두 가지가 있습니다. 첫 번째로 변수로 참조하는 방법입니다.
add=lambda x, y: x+y
print(add(5,4)) #9
두 번째로는 인수로 넘기는 방법입니다.
num = [1,2,3,4,5]
squares = list(map(lambda x: x**2, num))
print(squares) #[1,4,9,16,25]
코딩 테스트 코드 구현 노하우
- 조기반환: 코드 실행 과정이 함수 끝까지 도달하기 전 반환하는 방법입니다. 조건을 부여하고, 그 조건에 해당되는 경우 return으로 조기반환 할 수 있도록 설정합니다.
- 보호구문: 본격적인 로직 진행 전 예외 처리 코드를 추가합니다. 예를 들어, 'if (값이 없으면 / list가 아니면 / list의 길이가 0이면) 종료한다'의 방식으로 코드를 작성하여 처음부터 예외에 대한 고려를 가능하도록 합니다.
- 합성함수: 보통 람다식을 활용합니다.
def add_three(x):
reutrn x+3
def square(x):
return x*x
composed_function = lambda x: square(add_three(x))
print(composed_function(3))
'학습 기록 > 코딩 테스트 기초 이론' 카테고리의 다른 글
파이썬 코딩테스트 준비: 배열 기초 (2) - 실패율 (0) | 2024.09.24 |
---|---|
파이썬 코딩테스트 준비: 배열 기초 문제 풀어보기 (1) (1) | 2024.09.14 |
파이썬 코딩테스트 준비: 배열 (4) | 2024.09.08 |
코딩 테스트 준비, 알고리즘 효율 분석 (0) | 2024.08.28 |