내일배움캠프/Python

[Python] 파이썬 문제 해결 전략 (5)

snu7256 2024. 7. 18. 21:26

 

 

# 공백 없애주기

a = ‘   1 2  34  

a.split() => ['1', '2', '34']

 

여러 개의 구분자로 문자열을 나눌 때

구분자를 공백으로 바꿔주고

공백을 split으로 없애주는 방법이 많이 쓰임

 

# 정렬

solution=lambda a,n:sorted(a,key=lambda x:(abs(x-n),x))[0]

 

하나의 기준으로 정렬할 때 같은 값이 나온 경우, 추가적인 기준을 주는 법

 

# 딕셔너리 get 함수

C = years.get(‘c’, ‘nothing’)

만약 딕셔너리에 c가 있다면 c의 값을 가져오고 없다면 c에 nothing을 저장해라

 

# 이진트리

쿼리(n) 종류가 많아지면 2분할 방식으로 2이하, 3이상 으로 만들어주면(2진트리) n:1~4까지 어떤 경우든 조건문 2번 안에 자리를 찾아 들어가게 됩니다!

 

# 이진수

A = ‘1010’ 일 때 int(A, 2)를 하면 십진수로 표현

 

bin(10)은 10을 이진수로 바꿔줌. 

이진수임을 표현하기 위해 앞 두 자리가 0b임

 

# 슬라이싱

슬라이싱은 배열의 길이를 초과해도 오류가 나지 않음

 

# 약수 구하기

기사단원의 무기

문제를 풀면서 처음으로 시간 초과를 맞아봤다…

시간 복잡도를 이해하고, 약수 구하기 알고리즘을 공부할 필요성을 느꼈다.

 

# 대소문자 바꾸기

print(input().swapcase())

너무 쉬워지네

 

# 등수 구하기

def solution(score):

    a = sorted([sum(i) for i in score], reverse = True)

    return [a.index(sum(i))+1 for i in score]

 

sorted로 내림차순을 한 뒤

index를 통해서 순위 구하기

 

# 차근차근 최대값 구하기

    num = 0

    data = 0

    for i in set(array):

        if array.count(i) > num:

            num = array.count(i)

            data = i

        elif array.count(i) == num:

            data = -1

    return data

 

# 조건의 일부만 만족 모두 만족

if any(cur<num for num in temp):

if all(cur<num for num in temp):

 

이렇게 하니까 조건을 주기 쉬운 것 같아..

 

# 소수 판별

에라토스테네스의 체

소수를 구하는 방법으로

2부터 시작해서 소수의 배수들을 모두 소거해나감..

 

이걸 어떻게 알고리즘으로 작성할까 싶지만..

사용할 수만 있다면 메모리 사용을 줄여줄 수 있지 않을까…

 

# 아스키 코드로 범위

def solution(my_string):

    char_up = {chr(i) : 0 for i in range(ord('A'),ord('Z') + 1)}

    char_lo = {chr(i) : 0 for i in range(ord('a'),ord('z') + 1)}

    for m in my_string :

        if m.isupper() :

            char_up[m] += 1

        else :

            char_lo[m] += 1

    return list(char_up.values()) + list(char_lo.values())

 

# 대입표현식(바다코끼리 연산자)

 

[y := f(x), y**2, y**3]

이런 식으로 바로 변수를 정의를 내릴 수가 있음