Python for Coding test

TToII·2021년 8월 10일
0

algorithm_study

목록 보기
5/6

코딩 테스트를 위한 파이썬 문법 [이것이 취업을 위한 코딩 테스트다]

지수 표현 방식은 코딩 테스트에서 많이 사용된다.

최단 경로 문제에서는 도달할 수 없는 노드에 대하여 최단 거리를 무한(INF)로 설정하곤 한다.
최단 경로로 가능한 10억 미만이라면 무한(INF)을 표현할 때 10억을 이용할 수 있다.
=> 10억을 숫자로 입력하기 보다는, 1e9를 입력하여 실수할 확률도 줄이고, 간단하게 표현한다.

소수점 이용

컴퓨터 시스템은 수 데이터를 처리할 때 2진수를 이용하여, 실수를 처리할 때 부동 소수점 방식을 이용하는데, IEEE754 표준에서는 실수형을 저장하기 위해 4바이트 혹은 8바이트라는 고정된 크기의 메모리를 할당한다.
이러한 이유로 인해 현대 컴퓨터 시스템은 대체로 실수 정보를 표현하는 정확도에 한계를 가진다.
=> round() 함수를 이용하면 소수점 값을 비교하는 문제를 해결할 수 있다.

round(123.456, 2) == 123.46
두번째 인자 없이 인자를 하나만 넣을 때는 소수점 첫째 자리에서 반올림한다.

수 자료형의 연산

파이썬에서 나누기 연산자(/)는 나눠진 결과를 기본적으로 실수형으로 처리한다.

리스트 만들기

코딩 테스트 문제에서는 주로 크기가 N인 1차원 리스트를 초기화해야 하는데 다음 방식으로 초기화하면 편리하다.

#크기가 N이고, 모든 값이 0인 1차원 리스트 초기화
n = 10
a = [0] * n
print(a)

리스트 컴프리헨션

리스트를 초기화하는 방법 중 하나
리스트 컴프리헨션을 이용하면 대괄호 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화할 수 있다.

#0부터 19까지의 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(20) if i % 2 == 1]
print(array)
--------------------------------------------------------------------
위 코드와 아래 코드는 동일한 코드이다.
array = []
for i in range(20):
    if i % 2 == 1:
        array.append(i)
print(array)

이러한 리스트 컴프리헨션은 2차원 리스트를 초기화할 때 매우 유용하다.

 #N * M 크기의 2차원 리스트 초기화
 n = 3
 m = 4
 array = [[0] * m for _ in range(n)] # 언더바의 역할 ? 
 print(array)
  • 언더바는 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 언더바(_)를 자주 사용한다.
  • 참고로 특정 크기의 2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션을 이용해야 한다.

리스트 관련 기타 메서드

insert(), append(), remove()를 눈여겨 두자.
insert() 함수를 사용할 때 원소의 개수가 N개면, 시간 복잡도는 O(N)이다. 파이썬의 리스트 자료형의 append() 함수는 O(1)에 수행되는 데 반해 insert()는 동작이 느리다.
remove()의 시간 복잡도도 insert()와 마찬가지로 O(N)이다.
특정한 값의 원소를 모두 제거하려면 어떻게 해야 할까 ?

a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}
#remove_set에 포함되지 않은 값만을 저장
result = {i for i in a if i not in remove_set}
print(result)

결과 값은 1, 2, 4만이 남게된다.

문자열 자료형

우리가 소스코드를 작성할 때는 문자열 안에 큰따옴표나 작은따옴표가 포함되어야 하는 경우가 있다.
백슬래시를 사용하면, 큰따옴표나 작은따옴표를 문자열에 원하는 만큼 포함 가능

data = 'Hello World'
print(data)
----------------------
data = "Don't you know \"Python\"?"
print(data)

튜플 자료형

리스트와 거의 비슷하나, 다음과 같은 차이가 있다.

  • 튜플은 한 번 선언된 값을 변경할 수 없다.
  • 리스트는 대활호([])를 이용하지만, 튜플은 소괄호(())를 이용한다.

튜플 자료형은 그래프 알고리즘을 구현할 때 자주 사용된다.
다익스트라 최단 경로 알고리즘처럼 최단 경로를 찾아주는 알고리즘의 내부에서는 우선순위 큐를 이용하는데 해당 알고리즘에서 우선순위 큐에 한번 들어간 값은 변경되지 않는다.
그래서 우선순위 큐에 들어가는 데이터를 튜플로 구성하여 소스코드를 작성한다.
일부러 튜플을 이용하게 되면 혹여나 자신이 알고리즘을 잘못 작성함으로써 변경하면 안되는 값이 변경되고 있지는 않은지 체크할 수 있다.

또한 튜플은 리스트에 비해 상대적으로 공간 효율적이고,
일반적으로 각 원소의 성질이 서로 다를 때 주로 사용한다.
흔히 다익스트라 최단 경로 알고리즘에서는 '비용'과 '노드 번호'라는
서로 다른 성질의 데이터를 (비용, 노드 번호)의 형태로 함께 튜플로 묶어서 관리

profile
Hello World!

0개의 댓글