[python] programmers(기초) 문자열 모음집

도리·2025년 3월 26일

꼬리 문자열

def solution(str_list, ex):
         #모든 문자열 합치고 #ex제외
    answer = ''.join(i for i in str_list if ex not in i)

    return answer

문자열 바꿔서 찾기

    1. dict 만든다
    1. maketrans() - 치환 테이블만들기
    1. translate() - 치환 테이블로 치환하기
# dictionary 사용해서 바꾸기 
def solution(myString, pat):
    answer = 0
    #myString 바꾸고
    dict = { 'A' : 'B',
             'B' : 'A'}
    myString_tran = myString.maketrans(dict)
    myString = myString.translate(myString_tran)
    
    # pat 있으면 1
    if pat in myString:
        answer =1 
    return answer

배열에서 문자열 대소문자 변환하기

def solution(strArr):
    answer = []
    # 홀수번째 - 대문자 / 짝수번째 - 소문자
    for i in range(len(strArr)):
        if (i % 2 == 0) :
            answer.append(strArr[i].lower())
        else:
            answer.append(strArr[i].upper())
        
    return answer

문자열의 앞의 n글자

def solution(my_string, n):
    answer = '' #my_string 앞의 n글자 = 슬라이싱
    answer = ''.join(my_string[:n])
    return answer

부분 문자열이어붙여 문자열 만들기

def solution(my_strings, parts):
    answer = ''
    for i in range(len(my_strings)):
        n , m = parts[i][0], parts[i][1]
        result = ''.join(my_strings[i][n:m+1])
        answer += result

                         
    return answer

⭐️ 문자열 잘라서 정렬하기 ⭐️

  • 오답
    • xx가 연속된 경우가 있으면 ""가 생긴다.
    • 공백 생각을 안함.
def solution(myString):
    result = myString.strip('x').split('x')
    result.sort()
    return result
  • 정답

    • if i 사용해서 빈문자열 제거
    • 빈 문자열("")을 False로 평가하기 때문에 필터링 역할을 함.
      def solution(myString):
      	result = [i for i in myString.split('x') if i ]
         result.sort()
      	return result
      ``

문자열이 몇번 등장하는지 세기

def solution(myString, pat):
    answer = 0
    #pat 길이만큼 잘라서 같은지 확인해볼까 
    length = len(myString)-len(pat)+1
    for i in range(length):
        if myString[i:i+len(pat)] == pat:
            answer += 1 
    return answer

⭐️ 조건 문자열 ⭐️

  • programmers 문제사이트

  • astype으로 문자열로 감싸진 부호들을 형변환하여 문제를 풀 수는 없을까? 생각해보다 답이 없어서 우선 조건문으로 풀었다.

def solution(ineq, eq, n, m):
    answer = 0
    # 참이면 1, 거짓이면 0. 
    
    if eq == "=":
        if ineq == ">":
            answer = int(n>=m)
        else: answer = int(n<=m)
    else:
        if ineq == ">":
            answer = int(n>m)
        else: answer = int(n<m)
    return answer

<다른 정답코드>

  • eval 함수 이용하면 계산가능!!!!!
def solution(ineq, eq, n, m):
    return int(eval(str(n)+ineq+eq.replace('!', '')+str(m)))

⭐️ 문자열 여러번 뒤집기 ⭐️

< 오답 >

def solution(my_string, queries):
    answer = ''
    
    for i in queries :

    answer += my_string[:i[0]] #re
    answer += my_string[i[1]:i[0]-1:-1] #mr
    answer += my_string[i[1]+1:] #gorpsam

    return answer 
  • 잘못 슬라이싱 했다 쩝.

<정답>

  • reverse하려면 [s:e+1] 그대로 자르고 [::-1] 해주면 된다.
def solution(my_string, queries):
    for s, e in queries:
        my_string = my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]
    return my_string

문자열 묶기

<내 코드>

  • result -> set해서 답안 만들기
  • count해서 result 답안 갯수 세기
  • answer = count값의 max값 구하기
def solution(strArr):
    answer = 0 # 길이가 같은 문자열 개수구하고 max값 찍기
    result = []
    counts = []
    for i in strArr:
        result.append(len(i))
    
    set_result = set(result)
    
    for j in set_result:
        counts.append(result.count(j))
    answer = max(counts)
    return answer

<다른 사람 코드>
참고

def solution(strArr):
   d = {}
   for i in strArr:
       d[len(i)] = d.get(len(i), 0) + 1
   return max(d.values())
  • 나는 set으로 답안을 만들었는데 이 코드는 애초에 dict(key,value) 를 썼당

  • strArr를 순회하면서 d[len(i)] < key, d.get(len(i),0) < value
    중복되는 값이면 +1

  • dict사용은 늘 어렵다 딩딩딩

특정 문자열로 끝나는 가장 긴 부분 문자열 찾기

<내 코드>

  • 거꾸로 돌려서 find하고 다시 돌렸음.
def solution(myString, pat):
    answer = ''
    myString = myString[::-1]
    pat = pat[::-1] # 거꾸로 만들어서 find하기
    
    pat_index = myString.find(pat)
    answer = myString[pat_index:]
    answer = answer[::-1]
    
    return answer

<다른 코드>

  • rfind으로 마지막 인덱스 찾을수 있었음.
def solution(myString, pat):
    end = myString.rfind(pat)
    
    return myString[:end + len(pat)]

rny_string

  • replace 사용하기

def solution(rny_string):
    answer = ''
    
    for i in rny_string:
        answer = rny_string.replace('m','rn')
        
    return answer

세 개의 구분자

  • a,b,c를 " " 로 바꾸고, " "기준으로 나눠서 빈칸 아니면 저장
  • 마지막에 [] 비어있으면 ["EMPTY"]로 바꿔주기.
def solution(myStr):
    answer = []
    myStr=myStr.replace("a"," ")
    myStr=myStr.replace("b"," ")
    myStr=myStr.replace("c"," ")
    
    
    a = myStr.split(" ")
    for i in a:
        if i:
            answer.append(i)
            
    if answer == [] :
        answer = ["EMPTY"]
    return answer
profile
인공지능응용학과 졸업예정..

0개의 댓글