본문 바로가기

study/알고리즘

[알고리즘] 파이썬 문법 복습

- 소수점 값을 비교하는 작업이 필요한 문제 --> round() 함수 이용

인자 : 실수형 데이터, 반올림하고자 하는 위치 - 1

 

a = 0.3 + 0.6

if a == 0.9:
	print(True)
else:
	print(False) # False 출력
    
if round(a, 4) == 0.9:
	print(True) # True 출력
else:
	print(False) 
    

    

 

- 리스트 초기화

 

#크기가 N이고, 모든 값이 0인 1차원 리스트 초기화

n = 10
a = [0]*n
print(a) #[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

 

# 리스트 컴프리헨션을 이용한 N * M 크기의 2차원 리스트 초기화

n = 3
m = 4
array = [[0] * m for _ in range(n)]
#[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

 

언더바(_)는 파이썬 자료구조/알고리즘에서 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 자주 사용한다.

참고로 특정 크기의 2차원 리스트를 초기화할 때에는 반드시 리스트 컴프리헨션을 사용해야 한다.

 

- 리스트 method

insert(), remove() 의 시간 복잡도는 O(N)

 

특정한 값의 원소를 모두 제거하려면 ?

a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}

result = [i for i in a if i not in remove_set]
print(result) #[1, 2, 4]

 

파이썬에서 리스트, 문자열, 튜플 등 순차적인 정보를 담는 자료형을 iterable 자료형이라고 한다. in 문법은 이러한 iterable 자료형에 모두 사용이 가능하다.

 

- 튜플 자료형

튜플은 한번 선언된 값을 변경할 수 없다.

리스트는 대괄호 [] 를 사용하지만 튜플은 소괄호 () 를 이용한다.

튜플 자료형은 그래프 알고리즘을 구현할 때 자주 사용된다.

튜플은 리스트에 비해 상대적으로 공간 효율적이고 일반적으로 각 원소의 성질이 서로 다를 때 주로 이용한다.

 

- 사전 자료형

파이썬의 사전 자료형은 내부적으로 해시 테이블을 이용하므로 기본적으로 데이터의 검색 및 수정에 있어서 O(1)의 시간에 처리할 수 있다.

키 데이터만 뽑아서 리스트 이용 -> keys()

값 데이터만 뽑아서 리스트 이용 -> values()

 

- 집합 자료형

중복을 허용하지 않는다.

순서가 없다. 따라서 인덱싱으로 값을 얻을 수 없다는 것이 특징이다.

집합 자료형을 초기화 할 때 set()함수를 이용하거나, 중괄호 {} 안에 각 원소를 콤마를 기준으로 구분해서 넣으면 된다.

 

#1
data = set([1, 1, 2, 3, 4, 4, 5])
print(data) # {1, 2, 3, 4, 5}

#2
data = {1, 1, 2, 3, 4, 4, 5}
print(data) # {1, 2, 3, 4, 5}

 

add() -> 하나의 집합 데이터에 값을 추가 -- O(1)

update() -> 여러 개의 값을 한꺼번에 추가

remove() -> 특정한 값 제거 -- O(1)

 

data = set([1, 2, 3])
data.add(4)
data.update([5, 6])
data.remove(3)
print(data) # {1, 2, 4, 5, 6}

 

- 조건문의 값이 참이라고 해도 아무것도 처리하고 싶지 않을 때 pass문 이용가능

 

score = 85

if score >= 80 :
	pass #나중에 작성할 소스코드

 

- 조건부 표현식 이용

 

score = 85
result = "Success" if score >= 80 else "Fail"

print(result) # Success

 

- 함수

 

함수에서 매개변수나 return문은 존재하지 않을 수 있다.

 

함수를 호출하는 과정에서 인자를 넘겨줄 때 파라미터의 변수를 직접 지정해서 값을 넣을 수 있다.

 

def add(a, b):
	print('함수의 결과:', a+b)
add(b = 3, a = 7)

 

함수 안에서 함수 밖의 변수 데이터를 변경해야 하는 경우 함수에서 global 키워드 이용

global 키워드로 변수를 지정하면, 해당 함수는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 된다.

 

a = 0

def func():
	global a
    a += 1
    
for i in range(10):
	func()

print(a) # 10

 

파이썬에서는 람다 표현식을 사용할 수 있다.

람다 표현식을 이용하면 함수를 매우 간단하게 작성하여 적용할 수 있다.

#람다 표현식으로 구현한 add()
print((lambda a, b: a + b)(3, 7)) # 10

 

- 입력

 

여러 개의 데이터를 입력받을 때 데이터가 공백으로 구분되는 경우

list(map(int, input().split()))

# 1. input()으로 입력 받은 후 split()으로 공백으로 나눈 리스트로 바꿈
# 2. map()을 이용하여 해당 리스트의 모든 원소에 int() 함수 적용
# 3. 최종적으로 그 결과를 list()로 다시 바꿈

 

#공백을 기준으로 구분하여 적은 수의 데이터 입력

n, m, k = map(int, input().split())

 

파이썬의 기본 input() 함수는 동작 속도가 느려서 시간 초과로 오답 판정을 받을 수 있다.

이 경우 파이썬의 sys 라이브러리에 정리되어 있는 sys.stdin.readline() 함수를 이용한다.

sys 라이브러리를 사용할 때는 한 줄 입력을 받고나서 rstrip() 함수를 꼭 호출해야 한다.

readline()으로 입력하면 입력 후 엔터가 줄바꿈 기호로 입력되는데, 이 공백 문자를 제거하려면 rstrip() 함수를 이용해야 한다.

 

import sys

data = sys.stdin.readline().rstrip()

 

- 출력

 

문자열 자료형과 다른 자료형 더하기 연산

 

answer = 7

print("정답은" + str(answer) + "입니다.") # 정답은 7입니다.
print("정답은", str(answer), "입니다.") # 정답은 7 입니다.

#3.6버전 이상의 버전 f-string 문법 사용
print(f"정답은 {answer}입니다.") # 정답은 7입니다.

 

출처 : < 이것이 취업을 위한 코딩 테스트다 > 책