python 리스트 comprehension 표현식
- arr = [i for i in range(10)] -> [0 1, 2, 3, 4, 5, 6, 7, 8, 9] 생성.
- 이때 range대신 시퀀스 들어가도 가능.
- 뒤에 if문 붙여서 [i for i in range(10) if i % 2 == 0] -> [0, 2, 4, 6, 8] 생성.
- for문 여러 개 중첩 가능. 예) 2단 ~ 9단 리스트 만들 시 [i * j for i in range(2, 10) for j in range(1, 10)] 하면 i가 2부터 9까지 반복될 때 각각 j 가 1부터 9까지 반복됨. 인셉션처럼 갈수록 반복문이 깊어지는 것.
문자열 응용하기
- .replace()
- '문자열'. replace('원래 문자열', '나중 문자열') -> 원래 문자열에서 나중 문자열로 (부분 수정 가능) 바뀐 문자열 반환
- 새롭게 바뀐 결과를 이용하려면 다시 변수에 저장 필요.
- .translate()
- 문자열 안의 문자를 다른 문자로 치환.
- 1) table = str.maketrans('원래 문자', '새로운 문자')로 변환 테이블 생성
- 2) translate(table)로 문자 바꿈
몰랐던 기능들
- 이외에도 '문자열'.split()등을 통해 공백을 분리하거나
- ' '. join('문자열 1', '문자열 2',...)을 통해 문자열 사이에 공백을 넣으며 문자열 연결 가능.
- '문자열'.upper() -> 모두 대문자로 바꿈
- '문자열'.lower() -> 모두 소문자로 바꿈
- 공백 삭제 -> '문자열'.lstrip() -> 문자열 왼쪽에서 문자 삭제, rstrip() -> 오른쪽에서 삭제, strip() -> 양쪽에서 삭제
- 이를 이용해 특정 문자 삭제도 가능.
백준 2869
- 백준 풀던 중 처음으로 시간 초과가 걸릴 수도 있겠다는 생각이 든 문제.
- https://www.acmicpc.net/problem/2869
-
# 달팽이가 나무를 올라가는 데 며칠이 걸리는지 구하는 프로그램. # A, B, V가 첫줄에 입력, 며칠이 걸리는지를 출력. # 입력부 a, b, v = list(map(int, input().split())) # 연산부 # ver.2 ** while로 무지성 반복 돌리니 v = 1억일때 시간이 너무 걸림. # 최적화가 필요하다고 생각해 공식으로 다시 작성하니 훨씬 빠름. v -= a day = v // (a-b) if v / (a-b) > v// (a-b): day += 1 day += 1 # 출력부 print(day)
- 처음에는 while로 단순 반복으로 처리하려 했으나, 1억 번 반복에서 시간이 좀 걸렸고, 반복문이 아닌 공식이 있을 거라 생각해 다시 생각해보니 나눗셈과 나머지를 이용해 처리할 수 있던 문제였다.
- 더 알게 된 점:
- math.ceil함수를 통해 올림을 할 수 있고, 이를 이용해 식을 더 간단히 할 수 있다.
LIST
'Programming Language > Python 공부' 카테고리의 다른 글
[Pylearn] 1222 / 딕셔너리 응용 (0) | 2021.12.22 |
---|---|
[Pylearn] 1213 / 문자열 응용하기 (0) | 2021.12.13 |
[Python] 1210 / file 입출력, 클래스 #1 (0) | 2021.12.10 |
[Python] 1202 (0) | 2021.12.02 |
[Python] 1201 공부한 점들 (0) | 2021.12.01 |