[프로그래머스] lv0. 특정 문자 제거하기, 문자 반복 출력하기, 모음 제거, 문자열안에 문자열, 문자열 정렬하기

주연·2023년 1월 29일
0

Python 문제 풀이

목록 보기
15/20
post-thumbnail

특정 문자 제거하기

230129

문제

문제 설명
문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ my_string의 길이 ≤ 100
letter은 길이가 1인 영문자입니다.
my_string과 letter은 알파벳 대소문자로 이루어져 있습니다.
대문자와 소문자를 구분합니다.

풀이

def solution(my_string, letter):
    return my_string.replace(letter, '')

문자 반복 출력하기

230129

문제

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.

제한사항
2 ≤ my_string 길이 ≤ 5
2 ≤ n ≤ 10
"my_string"은 영어 대소문자로 이루어져 있습니다.

입출력 예

my_stringnresult
"hello"3"hhheeellllllooo"

풀이

def solution(my_string, n):
    text = ''
    for i in my_string:
        for j in range(n):
            text += i
    return text

문제보고 ?했다. 결국 사용한 건 for문이다.
낯설면 그냥 for문 해버리는 나..

  • 다른 사람 풀이
#1
def solution(my_string, n):
    answer = ''
    for m in my_string:
        answer += (m * n)
    return answer
    
#2
def solution(my_string, n):
    return ''.join(i*n for i in my_string)

#1) 왜 나는 필요없는 for문 한 번 더 썼지? 다음에 여러 번 출력할 때는 이렇게 쓰자.

#2) 변수 생성하지 않고 사용할 수 있어 좋다. 다음에 문자 합칠 때 join함수를 이용해보자

모음 제거

230130

문제

문제 설명
영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항
my_string은 소문자와 공백으로 이루어져 있습니다.
1 ≤ my_string의 길이 ≤ 1,000

입출력 예

my_stringresult
"bus""bs"
"nice to meet you""nc t mt y"

풀이

def solution(my_string):
    ch = my_string.split()
    ch = list(c.translate(str.maketrans('aeiou', '     ')).replace(' ', '') for c in ch)
    return ' '.join(c for c in ch)

ㅎ..아나 replace 5개 안 쓰려다가 오히려 더 복잡하고 보기 싫은 코드가 되어버렸다.

#1
def solution(my_string):
    return ''.join(i for i in my_string if not (i in "aeiou")
    
#2
import re

def solution(my_string):
    answer = re.sub("a|e|i|o|u", "", my_string)
    return answer

#1) 이렇게 쓰면 얼마나 좋아..거지같이 풀었다면 다른 사람 코드 기억하자..

#2) 정규 표현식 이용

정규 표현식(re.sub)

import re

re를 import해야 사용 가능하다.

re.sub(pattern, new, string)

string에서 pattern을 new로 대체하라는 의미
(참고: https://cosmosproject.tistory.com/180)

여러 문자를 바꿀 때 유용. 예로 전화번호 바꿀 때도 가능. 아주 유용하다

문자열안에 문자열

230130

문제

문제 설명
문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ str1의 길이 ≤ 100
1 ≤ str2의 길이 ≤ 100
문자열은 알파벳 대문자, 소문자, 숫자로 구성되어 있습니다.

입출력 예

str1str2result
"ab6CDE443fgh22iJKlmn1o""6CD"1
"ppprrrogrammers""pppp"2
"AbcAbcA""AAA"2

풀이

def solution(str1, str2):
    return 1 if str1.find(str2) != -1 else 2
  • 다른 사람 풀이
def solution(str1, str2):
    return 1 if str2 in str1 else 2

문자 포함 여부를 구할 때는 find 함수쓰거나 in 키워드 사용하기!!

문자열 정렬하기(1)

230130

문제

문제 설명
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.

제한사항
1 ≤ my_string의 길이 ≤ 100
my_string에는 숫자가 한 개 이상 포함되어 있습니다.
my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다. - - -

입출력 예

my_stringresult
"hi12392"[1, 2, 2, 3, 9]
"p2o4i8gj2"[2, 2, 4, 8]
"abcde0"[0]

풀이

import re 

def solution(my_string):
    return sorted(list(map(int, re.sub('[^0-9]','', my_string))))

위에서 본 정규 표현식을 이용해 풀어보려고 했다.
숫자를 제외한 나머지는 없애고 list에 넣으면 문자 형식으로 들어간다.
각 원소를 정수형으로 나타내야함으로 map함수를 이용했다.
그 후 정렬을 했다.

  • 다른 사람 풀이
def solution(my_string):
    return sorted([int(c) for c in my_string if c.isdigit()])

오! isdigit()를 이용하면 되구나.
숫자인 것만 int형으로 바꿔 리스트에 넣고 정렬을 했다.
다음에 이용해봐야겠다!!

문자열 정렬하기(2)

230207

문제

문제 설명
영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때, my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요.

제한사항
0 < my_string 길이 < 100

입출력 예

my_stringresult
"Bcad""abcd"
"heLLo""ehllo"
"Python""hnopty"

풀이

def solution(my_string):
    return ''.join(i for i in (sorted(list(my_string.lower()))))

이게 맞아...?

  • 다른 사람 풀이
def solution(my_string):
    return ''.join(sorted(my_string.lower()))

뭐야 list 안 써줘도 sorted만 쓰면 알아서 list형으로 바뀌네
(참고.. https://docs.python.org/ko/3/howto/sorting.html)
그리고 for문 안 써줘도 알아서 join해준다..
다음에 할 때는 for문 안 쓰고 해보자

profile
공부 기록

0개의 댓글