본문 바로가기

CS&알고리즘/프로그래머스

파이썬 코테 함수 정리1 (feat. 프로그래머스)

 

 

 

접두사인지 접미사인지 찾기  startswith(), endswith()

 

startswith() :시작 문자열이 지정된 문자와 같은지 : True or False형식으로 반환

endswith() : 끝 문자열이 지정된 문자와 같은지 : True or False형식으로 반환

 

표현 방식 

문자열 A가 문자열 b로 시작하는지 여부를 t/f반환

a.startswith(문자열b)

 

문자열 A가 문자열 b로 끝나는지 여부를  t/f반환

 

문자열A.endswith(문자열B)

 

관련 문제 ) 프로그래머스 LV0. 접두사, 접미사 찾기 

https://school.programmers.co.kr/learn/courses/30/lessons/181906

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

코드)

def solution(my_string, is_prefix):
    if my_string.startswith(is_prefix): return 1
    else: return 0

 

 

접미사 확인 문제도 있는도 endswith만 해주면 됨 

코드)

def solution(my_string, is_suffix):
    if my_string.endswith(is_suffix): return 1
    return 0

 

 

 

 

 

 

lstrip() rstrip()  strip() : 공백과 문자 제거 함수 

 

lstrip : 문자열에 왼쪽 공백이나 인자가된 문자열의 모든 조합을 제거

 

rstrip : 문자열에 오른쪽 공백이나 인자가된 문자열의 모든 조합을 제거

 

strip : 양쪽 문자열에 공백이나 인자가된 문자열의 모든 조합을 제거

lstrip ex)

' hello'.lstrip()      # 인자가 없을 경우 왼쪽 공백 제거
출력 'hello'


'apple'.lstrip('ap')   # 왼쪽으로 a, p의 문자열의 모든 조합을 제거 
출력 'le'
 

 

rstrip ex)


'hello '.rstrip()        # 인자가 없을 경우 오른쪽 공백 제거
출력 'hello'


'apple'.rstrip('lep')    # 오른쪽으로 l, e, p의 문자열의 모든 조합을 제거
출력 'a'
 
 

 

strip ex)

' apple '.strip()    # 인자가 없을 경우 왼쪽 공백 제거
출력 'apple'

'apple'.strip('ae')  # 양쪽끝에 a, e의 문자열의 모든 조합을 제거
출력 'ppl'

 

 

 

예제)  0떼기 

프로그래머스 문제 

https://school.programmers.co.kr/learn/courses/30/lessons/181847

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

def solution(n_str):
    return n_str.lstrip('0')

 

 

 

 

 

문자열 알파벳 변환 함수  ord() chr()

ord()

문자열을 아스키코드로 반환할 수 있는 함수

ord(c) 형태로 이용한다. 괄호( ) 안에 문자를 넣으면 그 문자에 해당하는 아스키코드를 숫자로 반환 

 

ex)

>>> ord('a')
97

>>> ord('z')
122

 

chr()

아스키코드를 문자열로 변환하는 함수

chr(i) 형태로 이용한다. 괄호( ) 안에 숫자를 넣으면 그 숫자의 아스키코드에 대응하는 문자를 반환

 

사용 예시

>>> chr(65)
A

>>> chr(90)
Z

 

 

 

 

 

eval()함수 

간단한 연산식을 string 에 저장 후 eval로 실행하면 위와 같이 연산된 값을 얻을 수 있음 

사용 ex)

exp = "1 + 2"
result = eval(exp)

print(result)

# 3

 

그치만 eval()함수를 사용할때에는 조심해야한다고 한다.

외부로부터 입력받은 데이터를 검증 없이 eval()에 전달하면 악의적인 코드가 실행될 수 있기 때문!

이는 코테 말고 cs정리 할때 찾아봐야겠다 .

 cf) ast.literal_eval이런거 사용하면 된다고 하는...??

 

 

 

 

 

문자열 중복제거

https://school.programmers.co.kr/learn/courses/30/lessons/120888

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

이 문제에서 set을 사용하려고 했는데 set은 순서가 보장이 되지 않는다. 

 

 

1. set로 변환 후 join 함수 사용 : 순서보장 X

s = 'aaabbbccc'
b = ''.join(set(s))
print(b) # cba

 

2. dict.fromkeys(word)

파이썬 3.6부터 dict가 순서보장하기 때문에 사용가능

s = 'aaabbbcccddd'
a = ''.join(dict.fromkeys(s))
print(a) # abcd

 

 

 

 

 

인덱스 슬라이싱

https://robotai.tistory.com/27

 

파이썬(Python) 슬라이싱(slice) 이해하기

슬라이스(Slice)의 사용법은 아주 간단합니다. 먼저 기본 사용법에 대해서 알아보죠. items[start:stop] # 리스트의 start 인덱스에서 stop-1 인덱스까지 슬라이싱 items[start:] # 리스트의 start 인덱스에서 리

robotai.tistory.com

 

# def solution(my_string, s, e):
#     answer = ''
#     for i in range(0, s):
#         answer += my_string[i]
#     for i in range(e, s-1, -1):
#         answer += my_string[i]
#     for i in range(e+1,len(my_string)):
#         answer += my_string[i]

#     return answer
def solution(my_string, s, e):
    return my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]

 

 

 

 

 

cf) join과 +=결합의 성능 차이 

 

join과 +=는 문자열을 결합할 때 다르게 동작하며, 성능 차이가 있을 수 있다.

1.+= 사용

+=는 문자열을 반복적으로 이어붙일 때마다 새로운 문자열을 생성

이는 불변(immutable)한 문자열의 특성상, 매번 새로운 문자열 객체를 생성하고, 그 객체에 기존 문자열을 복사하는 작업을 함

따라서 +=를 많이 사용할 경우, 특히 문자열의 길이가 길거나 반복 횟수가 많을수록 시간이 더 걸릴 수 있음

 

 

2. join 사용:

join은 리스트나 다른 이터러블(iterable)을 하나의 문자열로 결합하는 메서드

이는 새로운 문자열 객체를 생성하지 않고, 한 번에 결합을 수행하기 때문에 더 효율적입니다

join은 메모리 사용과 속도 측면에서 +=보다 더 우수한 성능을 보임

 

정리) 성능 비교

+=를 반복적으로 사용하는 경우 문자열을 결합할 때마다 새로운 객체를 생성해야 하므로 시간이 더 오래 걸리 수 있음

반면 join은 문자열을 한 번에 결합하는 방식이므로, 대규모 데이터에서는 join이 더 빠를 수 있다.

따라서 많은 문자열을 결합하는 경우 join을 사용하는 것이 성능 면에서 유리

 

 

 

 

 

순열과 조합 

combinations : 파이썬 조합 

from itertools import combinations

for i in combinations([1,2,3,4], 2):
    print(i, end=" ")
    
    
    
    
 from itertools import combinations

def solution(balls, share):

    for i in combinations(range(balls), share):  
        print(i)

solution(5, 3)

 

조합 개수만 구하고 싶다면?

반복문 없이 가능해서 더 효율적임 

from math import comb

def solution(balls, share):
    return comb(balls, share)  # 조합 개수 계산

print(solution(5, 3))  # 결과: 10

 

 

permutations : 파이썬 순열

from itertools import permutations

for i in permutations([1,2,3,4], 2):
    print(i, end=" ")

 

순열 개수만 구하고 싶다면?

마찬가지로 math에서 사용하면 됨 

from math import perm

def solution(n, r):
    return perm(n, r)

print(solution(5, 3))  # 결과: 60

 

 

 

 

 

 

count 함수 : 문자열 셀때 사용

문자열 안에서 찾고 싶은 문자의 개수를 찾을 수 있음 

어떤 함수는 문자열에서만 사용 가능한 함수도 있는데 count 함수는 튜플, 리스트, 집합과 같은 반복 가능한 iterable 자료형에서도 사용 가능

모든 자료형에서 사용 가능한 것은 아님

 

사용방법: '변수. count(찾는 요소)' 형태

괄호( ) 안에 찾고자 하는 값을 입력하면 함수를 사용한 변수 안에서 해당 값의 개수를 숫자로 반환한다. 

 

ex)7의 개수 세기 

def solution(array): 
    answer = 0
    for i in array:
        answer += str(i).count('7')  
    return answer