[이것이 코딩 테스트다] 1. 코딩 테스트 출제 경향 분석 및 파이썬 부수기

Ji·2021년 5월 12일
0

이것이 코딩 테스트다 책을 공부하고, 공부가 필요한 부분을 작성한 글.

지수 표현 방식

  • 파이썬에서는 e나 E를 이용한 지수 표현 방식을 이용
  • 최단 경로 알고리즘에서 도달할 수 없는 노드에 대해 최단거리를 무한(INF)로 설정.
# 1,000,000,000의 지수 표현 방식
a = 1e9
print(a)

# 752.5
a = 75.25e1
print(a)

실수형 더 알아보기

  • 오늘날 쓰이는 IEEE754 표준에서는 실수형을 저장하기 위해 4바이트 or 8바이트의 고정된 크기의 메모리를 할당 ->컴퓨터는 실수 정보 표현하는 정확도에 한계가 있음.
    -> solution : round 함수 사용. (ex) 123.456을 소수 셋째 자리에서 반올림 round(123.456,2)
a = 0.3 + 0.6
print(round(a, 4)) # 0.9
print(a) # 0.899999999999
if round(a, 4) == 0.9:
    print(True)
else:
    print(False)

리스트 컴프리헨션

  • 리스트 초기화 방법 중 하나.
  • 2차원 리스트 초기화할 때 효과적으로 사용 (N X M 크기의 2차원 리스트 초기화)
# N X M 크기의 2차원 리스트 초기화
n = 4
m = 3
array = [[0] * m for _ in range(n)]
print(array)

#[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

잘못된 예시: 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식.

# N X M 크기의 2차원 리스트 초기화 (잘못된 방법)
n = 4
m = 3
array = [[0] * m] * n
print(array)
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

array[1][1] = 5
print(array)
#[[0, 5, 0], [0, 5, 0], [0, 5, 0], [0, 5, 0]]

언더바의 사용

  • 파이썬에서는 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 언더바(_)를 사용
for _ in range(5):
    print("Hello World")

리스트 관련 메서드 정리

  • insert(삽입할 위치 인덱스, 삽입할 값) : 특정 인덱스 위치에 원소 삽입
  • 변수명.remove(특정 값) : 특정 값을 갖는 원소를 제거. 값을 가진 원소가 여러 개면 하나만 제거.
# 오름차순 정렬
a = [1, 4, 3]

a.sort()
print("오름차순 정렬: ", a)
# 오름차순 정렬:  [1, 2, 3, 4]

# 내림차순 정렬
a.sort(reverse = True)
print("내림차순 정렬: ", a)
# 내림차순 정렬:  [4, 3, 2, 1]
a = [4, 3, 2, 1]

# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기: ", a)
#원소 뒤집기:  [1, 2, 3, 4]

# 특정 인덱스에 데이터 추가
a.insert(2, 3)
print("인덱스 2에 3추가: ", a)
# 인덱스 2에 3추가:  [1, 2, 3, 3, 4]

# 특정 값인 데이터 개수 세기
print("값이 3인 데이터 개수: ", a.count(3))
# 값이 3인 데이터 개수:  2

# 특정 값 데이터 삭제
a.remove(1)
print("값이 1인 데이터 삭제: ", a)
# 값이 1인 데이터 삭제:  [2, 3, 3, 4]

리스트에서 특정 값을 가지는 원소를 모두 제거

a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5} # 집합 자료형

# remove_list에 포함되지 않은 값만을 저장
result = [i for i in a if i not in remove_set]
print(result)

# [1, 2, 4]

튜플

  • 리스트와 달리 한 번 선언된 값을 변경 불가
  • 리스트에 비해 공간 효율적임
  • 튜플 사용하기 좋은 경우
  1. 서로 다른 데이터를 묶어서 관리 (ex) 최단경로알고리즘: (비용,노드 버호) 형태로 튜플 자료형 사용
  2. 데이터 나열을 해싱(Hashing)키 값으로 사용- 튜플은 변경이 불가능 하기 때문
  3. 메모리의 효율적 사용이 필요할 때

사전 자료형 / 관련 메서드

  • key와 value의 쌍을 데이터로 가짐.
  • '변경 불가능한(Immutable) 자료형'을 키로 사용
  • Hash Table을 이용. 데이터 조회 및 수정에 있어서 O(1)의 시간에 처리 가능.
  • 키 데이터만 뽑아서 리스트로 이용할 때는 keys() 함수를 이용
  • 값 데이터만을 뽑아서 리스트로 이용할 때는 values() 함수를 이용
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'

print(data)

if '사과' in data:
    print("'사과'를 키로 가지는 데이터가 존재합니다")
    
#
{'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}
'사과'를 키로 가지는 데이터가 존재합니다


# 키 데이터만 담은 리스트
key_list = data.keys()
# 값 데이터만 담은 리스트
value_list = data.values()
print(key_list)
print(value_list)

#
dict_keys(['사과', '바나나', '코코넛'])
dict_values(['Apple', 'Banana', 'Coconut'])

집합 자료형

  • 중복 허용 X / 순서 없음
  • 집합은 리스트 or 문자열 이용하여 초기화 가능 -set()함수 사용
  • 중괄호를 사용.
# 집합 자료형 초기화 방법 1
data = set([1, 1, 2, 3, 4, 4, 5])
print(data)

# 집합 자료형 초기화 방법 2
data = {1, 1, 2, 3, 4, 4, 5}
print(data)

집합 자료형 연산

a = set([1, 2, 3, 4, 5])
b = set([3, 4, 5, 6, 7])

# 합집합
print(a | b)

# 교집합
print(a & b)

# 차집합
print(a - b)

##
{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5}
{1, 2}

집합 자료형 관련 함수

data = set([1, 2, 3])
print(data)

# 새로운 원소 추가
data.add(4)
print(data)

# 새로운 원소 여러 개 추가
data.update([5, 6])
print(data)

# 특정한 값을 갖는 원소 삭제
data.remove(3)
print(data)

##
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6}
{1, 2, 4, 5, 6}

표준 입력 방법

  • input() 함수: 한 줄의 문자열을 입력 받는 함수. sys.stdin.readline()도 사용
  • map() 함수: 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용

ex1) 공백을 기준으로 구분된 데이터를 입력 받을 때는 다음과 같이 사용
list(map(int, input().split()))
ex2) 공백을 기준으로 구분된 데이터의 개수가 많지 않다면 단순히 다음과 같이 사용
a, b, c = map(int, input().split())

빠른 입력 받기

  • 파이썬의 경우 sys 라이브러리에 정의되어 있는 sys.stdin.readline() 메서드를 이용. but 입력 후 엔터(Enter)가 줄 바꿈 기호로 입력되므로 rstrip() 메서드를 함께 사용함.
import sys

# 문자열 입력 받기
data = sys.stdin.readline().rstrip()
print(data)

표준 출력 방법

  • print()는 기본적으로 출력 이후에 줄 바꿈을 수행. 줄 바꿈을 원치 않는 경우 'end' 속성 사용.
# 출력할 변수들
a = 1
b = 2
print(a, b)
print(7, end=" ")
print(8, end=" ")
1 2
7 8 

f-string

  • python 3.6부터 사용 가능. 문자열 앞에 접두사 'f' 붙여 사용
  • 중괄호 안에 변수명 기입. 문자열, 정수를 함께 넣을 수 있음. 많이 쓰이니 꼭 익혀둘 것.
answer = 7
print(f"정답은 {answer}입니다")
##
정답은 7입니다
profile
공부방

0개의 댓글