AngelPlayer`s Diary

알고리즘 해결 과정

1. 지문 읽기 및 컴퓨터적 사고

2. 요구사항 분석

3. 문제 해결을 위한 아이디어 찾기

4. 소스코드 설계 및 코딩

 

 

시간 제한에 따른 알고리즘 설계

 

- 파이썬 기본 라이브러리 시간 복잡도

https://wiki.python.org/moin/TimeComplexity

 

TimeComplexity - Python Wiki

This page documents the time-complexity (aka "Big O" or "Big Oh") of various operations in current CPython. Other Python implementations (or older or still-under development versions of CPython) may have slightly different performance characteristics. Howe

wiki.python.org

 

 

파이썬 주요 기능 사용법

- round(변수, 위치) # 위치에서 반올림 수행

round(0.123456, 5) # 0.1235

 

- 리스트 컴프리헨션 : 리스트 초기화 방법

array = [i for i in range(5)] # [0, 1, 2, 3, 4]

array = [i for i in range(6) if i % 2 == 1] # [1, 3, 5]

array = [[0] * 열 for _ in range(행)] # 2차원 리스트 초기화 (행x열)

 

- 변수명.append() # 원소 하나 삽입 시 사용

 

- 변수명.sort() # 오름차순 정렬

 

- 변수명.reverse() # 원소 순서를 반대로 변경

 

- 변수명.insert(인덱스, 값) # 특정 위치에 값 삽입

 

- 변수명.remove(값) # 값을 가지는 원소 하나를 제거

 

- 리스트의 특정 원소 제거하기

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

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

 

- list(변수명.keys()) # 딕셔너리의 키만 모아 리스트 형태로 출력하기 (default == 딕셔너리 형태로 반환)

 

- list(변수명.values()) # 딕셔너리의 값만을 모아 리스트 형태로 출력하기

 

- 집합 자료형 연산

# 집합 a와 집합 b가 있을 때,
print(a | b) # 합집합

print(a & b) # 교집합

print(a - b) # 차집합

 

- 집합의 추가/삭제

변수명.add(4) # 원소 추가

변수명.update([5, 6]) # 여러 개 원소 추가

변수명.remove(7) # 원소 삭제

 

- 입력

# 10 3
n, m = map(int, input().split()) # 입력받은 데이터를 각각 변수에 저장

# 1 2 3 4 5 6
data = list(map(int, input().split())) # 입력받은 데이터를 리스트에 저장

# z9
x, y = list(input()) # 붙어있는 문자열 받기

 

# 입력 부 자동 입력
import sys
sys.stdin = open("03-2.txt", "r")

 

- 출력

파이썬은 직접적으로 문자열, 숫자 등 서로 다른 형을 함께 출력할 수 없음

# print("word" + data + "word") # error
print("word" + str(data) + "word")

print(hello, end="/")
print(world)
# output = hello/world

 

- 람다식

함수를 선언 없이 간단하게 작성

# (lambda 파라미터: 결과)(파라미터)
print((lambda a, b: a+b)(4, 5)) # 10

 

- 리스트 튜플 정렬

list = [('a', 10), ('b', 20), ('c', 15)]

sorted(list, key=lambda x: x[1]) # list의 1번째 원소를 기준으로 정렬
list.sort(key=lambda x: x[1]) # list의 1번째 원소를 기준으로 정렬

 

- 서로 다른 리스트의 동일한 인덱스의 원소끼리 더하기

list1 = [1, 3, 5]
list2 = [2, 4, 6]

result = map(lambda a, b: a + b, list1, list2) # [3, 7, 11]

 

- 연산

sum([1, 2, 3]) # 6
min([1, 2, 3]) # 1
max([1, 2, 3]) # 3

eval("(1+2)//3") # 문자열을 계산 # 1

 

- 순열과 조합

순열(itertools.permutations) : 서로 다른 n개에서 r개를 선택하여 일렬로 나열 (CAB != CBA)

조합(itertools.combinations) : 서로 다른 n개에서 순서에 상관없이 서로 다른 r개를 선택 (CAB == CBA)

from itertools import permutations
from itertools import combinations
data = ['A', 'B', 'C']

result_p = list(permutations(data, 3))
result_c = list(combinations(data, 3))

 

- 최대 공약수, 최소 공배수

최대 공약수(math.gcd) : 공통된 약수 중에서 가장 큰 값

최소 공배수(math.lcm) : 공통된 배수 중에서 가장 작은 값

import math

a = 21
b = 14

print(math.gcd(21, 14)) # 7
print(math.lcm(21, 14)) # 42

 

- 문자가 문자열 내부에 존재하는지 여부 체크

for '문자' in 문자열_변수:

 

- 문자 아스키 코드 값으로 반환하기

int(ord('문자'))

 

 

 

 

 

※ 해당 포스트는 "이것이 코딩 테스트다 with 파이썬(나동빈 저)"를 통해 에디터가 학습한 내용이 포함되어 있습니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band