이코테 책으로 알고리즘 공부를 하고 있는데, 책 중에 이런 문구가 있다.
"흔히 개발할 때 프로그래밍 언어의 문법에 능숙하고 코드 작성 속도가 빠른 사람을 보고 피지컬이 좋다'라고 이야기한다."
파이썬을 연구실에서 오래도록 사용하고 있어 손에 익지만, 코딩테스트를 위한 라이브러리는 또 달라서 항상 새롭다..
내가 또 구글에서 찾아 헤매지 않도록 하기 위해 정리하는 페이지이다!
정리를 위한 포스트라서 가독성이 떨어질 수 있고, 지속적으로 업데이트로 완성될 예정이다.
미래의 나를 위한 포스트이지만 나와 같은 또 다른 사람들에게도 도움이 되는 포스팅이길 바란다🙏🏻
빠른 입력 readline()
파이썬에서 입력에 사용되는 input()함수는 느리다!
코딩테스트는 시간 초과에 예민한 문제이기에 대안이 필요하다.
sys.stdin.readlines()함수를 이용하면 입력 속도를 줄일 수 있다.
readline()으로 입력하면 '\n'까지 입력되므로 rstrip()함수로 공백 문자는 제거해주면
원하는 값을 입력받을 수 있다.
import sys
data = sys.stdin.readline().rstrip()
print(data)
sys.stdin.readline()을 사용해서 알고리즘 문제를 풀다가 에러를 하나 만났다.
'utf-8' codec can't decode byte 0xe3 in position 0:
근데 그러다가 에러없이 정상적으로 작동했다(?)
아직 구글링으로 답을 찾지 못했다.. 답을 찾으면 업데이트 하도록 하겠다!
깔끔한 출력 코드 f-string
python3부터는 f-string을 지원한다. f-string을 사용했을 때 에러가 난다면 파이썬 버전을 확인하자!
(연구실에서 서버들을 옮겨다니다보면 가끔 마주하는 에러였다..ㅋㅋ)
python2까지는 .format() 형식을 사용했던 것으로 아는데, 굉장히 코드가 길어지고 난잡해진다.
print 안에 컷마로 길게 연결하는 것보다도 f-string이 코드 가독성면으로는 가장 좋은 것 같다.
아, f-string은 꼭 print에만 사용할 수 있는 문법이 아니고 문자열 데이터를 다룰 때는 항상 사용할 수 있는 것 같다.
name = '고은'
major = '컴퓨터공학'
print(f'안녕하세요, 저는 {name}입니다.\n저는 {major}을 전공하고 있습니다.')
이렇게 사용방법은 간단한데, 나는 코딩을 하다보면 숫자 자리수 제한해서 출력하는 걸 그렇게나 자주 사용하는데 자주 까먹더라..
정리를 해보자!!
name = '고은'
age = 23
print(f'안녕하세요, 저는 {name:5s}입니다.\n저는 {age:3d}살의 개발자입니다.\n')
print(f'안녕하세요, 저는 {name:^5s}입니다.\n저는 {age:03d}살의 개발자입니다.\n')
print(f'안녕하세요, 저는 {name:>5s}입니다.\n저는 {age:^3d}살의 개발자입니다.\n')
'{변수:숫자타입}' 이렇게 입력하면 자리수를 지정할 수 있다.
특히나, 0을 앞에 채우고 싶을 때라면 '{변수:05d}' 이런식으로 입력해주면 된다!
리스트
파이썬의 built-in 타입인 리스트
1. 리스트는 스택처럼 사용할 수 있다 (백준10828 [ 스택 ])
pop()함수를 사용하면 마지막 원소를 삭제하고 리턴해준다!
2. 리스트의 reverse 출력 (백준9093 [ 단어뒤집기 ])
array[::-1], reverse(), reversed() 함수의 사용으로 거꾸로 출력이 가능한데,
reversed()가 가장 빠르다!!
삼항연산자
간단한 If인 경우 한줄에 깔끔하게 코드로 짜고싶을때가 있다!
그럴 때 사용하면 좋은 삼항연산자.
# 삼항 연산자
# 참인경우 값 if 조건 else 거짓인경우 값
print("True는 참" if True else "True는 거짓")
print("False는 참" if False else "False는 거짓")
순열, 조합 사용방법
최근 봤던 코딩테스트에서 이 함수를 까먹어서 정말 당황했다... 도대체 이 간단한걸 왜 까먹었을까..
사실 itertools 라이브러리는 그냥 잘 알고 있는게 좋을 것 같다!
꼭.. 면접만 끝나면 다음주에 정리를 해보겠다.
(꼭 코딩테스트 보기 전에는 이 게시물을 한번 훑고 가자.. 나 자신..)
from itertools import combinations, permutations, product
# cartesian product
# 마치 자기 자신까지 반복하는 이중 for loop와 유사함!
print(list(product('ABCD', repeat=2)))
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('B', 'D'), ('C', 'A'), ('C', 'B'), ('C', 'C'), ('C', 'D'), ('D', 'A'), ('D', 'B'), ('D', 'C'), ('D', 'D')]
# 순열
print(list(permutations('ABCD', 2)))
# [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'A'), ('B', 'C'), ('B', 'D'), ('C', 'A'), ('C', 'B'), ('C', 'D'), ('D', 'A'), ('D', 'B'), ('D', 'C')]
#조합
print(list(combinations('ABCD', 3)))
# [('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'D'), ('B', 'C', 'D')]
'코딩테스트' 카테고리의 다른 글
[프로그래머스 Lv.2] 멀쩡한 사각형 (0) | 2022.03.02 |
---|---|
백준 1874번 [ 스택 수열 ] (0) | 2021.10.31 |
백준 9012 [ 괄호 ] (0) | 2021.10.31 |
백준 9093번 [ 단어 뒤집기 ] (0) | 2021.10.30 |
백준 10828번 [ 스택 ] (0) | 2021.10.30 |