-
[Python] 파이썬 문제 해결 전략 (1)내일배움캠프/Python 2024. 7. 8. 21:49
파이썬 코딩 문제가 갈수록 어려워지면서
기초를 탄탄하게 해야할 필요성을 느끼고 있습니다.
프로그래머스의 lv.0 난도 200문제와 lv.1 난도 문제를 7월 동안 다 풀기로 결심했습니다.
문제를 풀고 다른 사람들의 풀이를 보고 알게된 내용은
블로그에 작성하려고 합니다.
루트 표현식
라이브러리를 불러와 math.sqrt를 이용해서 문제를 풀었습니다.
(n ** 0.5)을 하면 라이브러리를 불러오지도 않고도 루트를 작성할 수 있습니다.
리스트 컴프리헨션
특정한 리스트에 대해서 특정 조건을 만족하는 리스트 요소만 반환하기
[표현식 for 항목 in 반복가능객체 if 조건문] 형태를 가짐
예시 1)
def solution(numbers):
return [num*2 for num in numbers]예시 2)
matrix = [[i for i in range(1, 4)] for j in range(3)]
print(matrix)
# 출력: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]리스트 컴프리 헨션에서 위와 같이 for문을 이중으로 사용하여
2차원 리스트를 생성해줄 수도 있습니다.
제너레이터 표현식
리스트 컴프리헨션과 비슷한 형태가 있어서 가져왔습니다.
(expression for item in iterable if condition) 형태를 갖고 있습니다.
def solution(array, height):
return sum(1 for a in array if a > height)이것은 리스트 컴프리헨션이 아닙니다.
제너레이터 표현식입니다.
둘의 차이점은 리스트 컴프리헨션은 대괄호 []를 쓰고 제너레이터 표현식은 소괄호()를 씁니다.
리스트 컴프리헨션은 모든 값을 한 번에 메모리에 로드하여 리스트로 반환합니다.
반면 제너레이터 표현식은 값이 필요할 때만 생성합니다.
덕분에 메모리 효율성이 뛰어나고 큰 데이터를 처리할 때 유용합니다.
추가로 시간 복잡도를 나타내는 Big O 표기법이 있는데
그 개념에 의하면
map > list comprehension > map + lambda > for loop 순으로 시간 복잡도가 좋다고 합니다.
따라서 map과 lambda를 같이 쓰지 않는 것을 추천한다고 합니다.
무조건 짧게만 작성하는게 좋은 게 아니라는 것을 알게 되었습니다.
sorted
def solution(array):
return sorted(array)[len(array) // 2]sorted를 쓰려면
var = sorted(array)처럼
새로운 변수에 무조건 값을 할당해주어야 한다고 알고 있었습니다.
따라서 return과 sort를 함께 써야하는 줄 알았습니다..
하지만 return할 때는 sort가 아닌 sorted를 함께 씁니다.
sort를 쓰지 않는 이유는 sort는 원본 리스트가 제자리에서 정렬을 수행하고
따라서 None을 반환하기 때문입니다.
sorted는 정렬된 새로운 리스트를 반환하므로 return과 함께 쓰입니다.
딕셔너리로 조건 정의하기
def solution(price):
discount_rates = {500000: 0.8, 300000: 0.9, 100000: 0.95, 0: 1}
for discount_price, discount_rate in discount_rates.items():
if price >= discount_price:
return int(price * discount_rate)어떤 문제의 조건을 위처럼 딕셔너리로 작성하여 풀 수도 있다는 것을 알게 되었습니다.
몫과 나머지
divmod(숫자1, 숫자2)는
숫자1에서 숫자2를 나눈 몫과 나머지를
튜플 형태로 반환하는 함수입니다.
def solution(hp):
answer = 0
for ant in [5, 3, 1]:
d, hp = divmod(hp, ant)
answer += d
return answerfor문에서 몫과 나머지에 대한 정보를 받아서
활용해줄 수 있습니다.
문자열에서 숫자만 찾아내기
def solution(my_string):
numbers = [int(num) for num in my_string if num.isdigit()]
return sum(numbers)Isdigit은 문자열 내에 숫자 0~9가 있을 때 true 출력해주는 함수입니다.
위의 코드는 true인 문자를 정수형으로 변환하여 리스트에 담아줍니다.
'내일배움캠프 > Python' 카테고리의 다른 글
[Python] 파이썬 문제 해결 전략 (3) (0) 2024.07.11 [Python] 파이썬 문제 해결 전략 (2) (0) 2024.07.10 [Python] Lambda 함수 (0) 2024.07.02 [Python] 행렬의 덧셈 (0) 2024.06.25 [Python] 단어 맞추기 게임 (1) 2024.06.19