학습 기록/코딩 테스트 기초 이론

파이썬 코딩테스트 필수 문법

romi__ 2024. 9. 1. 20:49

/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))