알고리즘/코딩테스트 합격자 되기

[코딩 테스트 합격자 되기]1주차 - 4장 코딩 테스트 필수 문법

김보통김보름 2024. 1. 4. 16:52
728x90
반응형

코딩 테스트 합격자 되기 1회독 스터디 내용입니다.

코딩테스트 합격자 되기 - 04 코딩 테스트 필수 문법 : 네이버 카페 (naver.com)

 

 

엡실론(eplsilon)

부동소수형 데이터를 이진법으로 표현하면 과정에서 발생하는 오차

 

10 % 3.2의 연산 결과는 0.4가 아니라 0.39999999999999947

이로 인해 테스트 케이스에 통과하지 못하는 경우도 생기니 꼭 주의하자!!

 

mutable object 데이터 수정할 수 있는 객체 list, directory, set
immutable object  데이터 수정할 수 없는 객체 정수, 부동소수점, 문자열, tuple

 

 

람다식(lamda)

간결한 함수 표현 방법
한 번만 사용하거나 인자로 함수를 넘겨야 할 경우 유용

 

 

조기 반환

코드 실행 과정이 함수 끝까지 도달하기 전에 반환하는 기법
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)

연산 시간 복잡도 설명
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)

연산 시간 복잡도 설명
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에 있는지 검

 

 

집합(set)

연산 시간 복잡도 설명
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))

 

 

문자열(str)

연산 시간 복잡도 설명
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