알고리즘/코딩테스트 합격자 되기
[코딩 테스트 합격자 되기]1주차 - 4장 코딩 테스트 필수 문법
김보통김보름
2024. 1. 4. 16:52
728x90
반응형
코딩 테스트 합격자 되기 1회독 스터디 내용입니다.
코딩테스트 합격자 되기 - 04 코딩 테스트 필수 문법 : 네이버 카페 (naver.com)
4️⃣장 코딩 테스트 필수 문법
엡실론(eplsilon)
부동소수형 데이터를 이진법으로 표현하면 과정에서 발생하는 오차
10 % 3.2의 연산 결과는 0.4가 아니라 0.39999999999999947
이로 인해 테스트 케이스에 통과하지 못하는 경우도 생기니 꼭 주의하자!!
mutable object | 데이터 수정할 수 있는 객체 | list, directory, set |
immutable object | 데이터 수정할 수 없는 객체 | 정수, 부동소수점, 문자열, tuple |
람다식(lamda)
간결한 함수 표현 방법
한 번만 사용하거나 인자로 함수를 넘겨야 할 경우 유용
⭐04-4 코딩 테스트 코드 구현 노하우
조기 반환
코드 실행 과정이 함수 끝까지 도달하기 전에 반환하는 기법
def total_price(quantity, price):
total = quantity * price # ➊
if total > 100: # ➋ total이 100보다 크면
return total * 0.9 # ➌ 조기 반환
return total
print(total_price(4, 50))
보호 구문
로직을 진행하기 전 예외 처리 코드 추가
def calculate_average(numbers):
if numbers is None: # ➊ 값이 없으면 종료(예외)
return None
if not isinstance(numbers, list): # ➋ numbers가 리스트가 아니면 종료(예외)
return None
if len(numbers) == 0: # ➌ numbers의 길이가 0이면 종료(예외)
return None
total = sum(numbers) # ➍
average = total / len(numbers)
return average
합성 함수(composite method)
2개 이상의 함수를 활용하여 함수를 추가로 만드는 기법(보통 람다식 활용)
def add_three(x): # ➊
return x + 3
def square(x): # ➋
return x * x
composed_function = lambda x: square(add_three(x)) # ➌
print(composed_function(3)) # ➍ (3 + 3)^2 = 36
✔️추가 문제
컬렉션 타입의 시간복잡도 정리
(외울 수 있을정도여야 함)
연산 | 시간 복잡도 | 설명 |
list.append(item) | O(1) (상수 시간) |
리스트끝에 item을 추가 |
list.insert(idx, item | O(n) (n : 리스트 길이) |
idx 위치에 item을 추가 |
list.pop() | O(1) (상수 시간) |
리스트의 마지막 요소를 제거하고 반환 |
list.pop(0) | O(n) (n : 리스트 길이) |
리스트의 첫 번째 요소를 제거하고 반환 |
list.remove() | O(n) (n : 리스트 길이) |
리스트에서 item을 찾아서 제거 (반환값은 없음) |
list.extend(s) | O(k) (k: 추가하는 리스트 s의 길이) |
리스트에 s의 모든 요소를 추가 (반환값은 없음) |
list[K] | O(k) (k: 추가하는 리스트 s의 길이) |
리스트 K 위치의 요소에 접근 |
list1 + list2 | O(n+m) (n : list1의 길이, m : list2의 길이) |
두 리스트를 결합하여 새 리스트를 생성하고 반환 |
list(set) | O(n) (n : 리스트/집합의 길이) |
집합을 리스트로 변환하여 중복을 제거 (순서는 보장되지 않음) |
item in list | O(n) (n : 리스트의 길이) |
리스트에 item이 있는지 확인 |
연산 | 시간 복잡도 | 설명 |
dict.get(key) | O(1) | 딕셔너리 dic에 주어진 ket에 해당하는 값을 반환 (key가 딕셔너리에 없으면 None을 반환) |
dic[key] | O(1) | 딕셔너리 dic에서 주어진 key에 해당하는 값을 반환 (key가 딕셔너리에 없으면 KeyError를 발생) |
dic.pop(key) | O(1) | 딕셔너리 dic에서 주어진 key에 해당하는 항목을 제거하고 그 값을 반환 (key가 딕셔너리에 없으면 KeyError를 발생시킴) |
key in dic | O(1) | 주어진 key가 딕셔너리 dic에 있는지 검 |
연산 | 시간 복잡도 | 설명 |
s.add(item) | O(1) | 집합 s에 요소 item을 추가 |
s.remove(item) | O(1) | 집합 s에서 요소 item을제거 (item이 s에 없을 경우 KeyError를 발생시킴) |
s.discard(item) | O(1) | 집합 s에서 요소 item을 제거 (item이 s에 없어도 에러가 발생하지 않음) |
s.union(s2) | O(len(s) + len(s2)) | 집합 s와 s2의 합집합을 반환 (반환값 : 합집합) |
s.intersection(s2) | O(min(len(s), len(s2))) | 집합 s와 s2의 교집합을 반환 (반환값 : 교집합) |
s.difference(s2) | O(len(s)) | 집합 s에서 s2의 요소를 제거한 차집합 반환 (반환값 : 차집합) |
set(list) | O(len(list)) | 리스트를 집합으로 변환 (반환값 : 집합) |
item in s | O(1) | 집합 s에 item이 포함되어 있는지 확인 (반환값 : bool (True 또는 false)) |
연산 | 시간 복잡도 | 설명 |
str1 + str2 | O(n+m) | 두 문자열 str1과 str2를 연결 (반환값 : 새로운 문자열) |
delimiter.join(list_of_strings) | O(n) (n : lsit_of_strings의 모든 문자열의 길이의 합) |
delimiter 문자열을 사용하여 list_of_strings의 모든 문자열을 연결 (반환값: 새로운 문자열) |
str.replace(old, new) | O(n) (n은 str의 길이) |
문자열 str에서 old 부분 문자열을 new 부분 문자열로 교체 (반환값: 새로운 문자열) |
str.split(sep) | O(n) (n은 str의 길이) |
문자열 str을 sep 문자열을 기준으로 나눔 (반환값: 문자열 리스트) |
str.startswith(prefix) | O(k) (k는 prefix의 길이) |
문자열 str이 prefix로 시작하는지 확인 (반환값: bool (True 또는 False)) |
str.endswith(suffix) | O(k) (k는 suffix의 길이) |
문자열 str이 suffix로 끝나는지 확인 (반환값: bool (True 또는 False)) |
list comprehensoin을 활용해서 1~100까지 수 중, 3과 9의 공배수인 수만 리스트에 담기도록 구현해주세요.
List comprehension란?
리스트를 생성하는 간결하고 효율적인 방법
기본 구조는 [expression for item in iterable if condition]
lst = [x for x in range(1, 101) if (x % 3 == 0) and (x % 9 == 0)]
print(lst)
728x90