0. sys.stdin.readline
시작하기 앞서서 파이썬은 입력받을 때 input() 을 이용하여 받는다.(특히 백준)
근데 요것이 시간을 잡아먹기 때문에 반복문이라도 들어가면 어김없이 시간 초과다.
그것을 방지하기 위해 sys 라이브러리를 이용하게 되는데 그 중 sys.stdin.readline 을 사용한다.
사용 예시와 응용은 밑의 코드 참조
import sys
input = sys.stdin.readline # input 대신에 사용하기 위해서 이렇게 선언
#1 보통 한 개의 정수형 받을 때
n = int(input())
#2 한 줄에서 여러 개의 정수형 리스트로 받을 때
lst = list(map(int, input().split()))
#3 여러 줄에서 문자열 받을 때
for i in range(n):
ns = list(map(str, input().lstrip())) # 개행문자가 들어가 있어서 lstrip() 사용
#3-2 조금 더 응용(n개의 line을 글자 하나하나 나눠 입력받아야 할 때)
s = [list(map(str, input().rstrip())) for _ in range(n)]
1. 문자열 내장함수
- find('a') : a가 몇번 index인지 확인하는 함수
- count('a') : a가 몇번 나오는지 확인하는 함수
- ord() ↔ chr() : 유니코드와 문자 변환 함수 // 외우면 좋은 유니코드 0(48) A(65) a(97)
- isalpha() : 알파벳일때만 True
- isdigit() : 정수형일때만 True
2. 리스트 내장함수
- remove("str") : "str"이라는 값만 제거
- if all(i > v for i in n) : 논리 and랑 비슷. 모든 것이 True일 때, return True
- if any(i > v for i in n) : 논리 or과 비슷. 한번이라도 True일 때, return True
1) sort()와 sorted()
파이썬에서 사용하는 정렬 기능이다. 바로 코드 참고하면서 살펴보자.
list = [5, 3, 7, 9]
list.sort() # Only 리스트만 정렬 가능
# 사용 시 바로 list에 적용 --> [3, 5, 7, 9]
sorted(list) # 정렬된 결과를 리스트로 반환(set, list, dict 형식도 정렬 가능)
# list에 바로 적용되지 않아서 따로 선언해줘야 한다.
# list = sorted(list) <-- 이런 식으로 해줘야한다.
# reverse 정렬(괄호 안에 사용하는 것은 동일)
list.sort(reverse = True) # 내림차순(default는 오름차순이다.)
sorted(list, reverse = True) # sorted는 이런 식으로 작성
# 밑에서 얘기할거지만 sort()는 리스트에서만 가능하고, sorted()는 다른 형식도 지원한다.
# 그래서 딕셔너리형을 정리할 때 자주 사용하고는 하는데 한번 살펴보길,,,
# (꼭 리스트형으로 반환되는 것에 주의)
3. 람다식(Lambda)
# 1. 람다식
plus_two = lambda x: x+2
plust_two(1) # 3 출력
# 2. 여러 요소는 튜플처럼 사용 가능 --> x : (x1, x2, ...)
answer.sort(key = lambda x : (x[0].lower(), int(x[1])))
# ex) 파일명 정렬 문제
# 1) x[0].lower() --> 대소문자 상관없이 정렬
# 2) int(x[1]) --> 정수 정렬
sorted(dictionary.items(), key = lambda x : x[1])
# 딕셔너리형은 {keys:values} 모양으로 되어있다.
# keys(), values() --> items()의 형식으로 값을 지정해서 가져올 수 있는데
# 두 개의 값을 가져오고 values()로 정렬하기 위해선 람다식이 필요하다.
# keys()으로만 정렬하고 싶으면 그냥 sorted() 사용하면 된다.
# ex) 출력 결과 확인해보기
dictionary = {1:9, 2:3, 3:5}
dict_list = sorted(dictionary.items(), key = lambda x : x[1])
dict_list_reverse = sorted(dictionary.items(), key = lambda x : -x[1]) # 부호 하나로 역순 가능
print(dict_list) # 출력 결과: [(2, 3), (3, 5), (1, 9)]
print(dict_list_reverse) # 출력 결과: [(1, 9), (3, 5), (2, 3)]
참고 : 프로그래머스 - 파일명 정렬
4. Itertools
from itertools import combinations # 조합 (순서 고려 X)
from itertools import permutations # 순열 (순서 고려 O)
combinations(list, 3) # list에서 3개의 요소 조합
# (A, B) == (B, A) 같은 걸로 취급
permutations(list, 3) # list에서 3개의 요소로 일렬 배열 (n*n-1*n-2*...)
# (A, B) != (B, A) 엄연히 다르다
Notion Link : https://solar-textbook-084.notion.site/readline-Itertools-6a9a24e8941348acafe99097ab3f82ce