프로그래머스 파이썬 기초 트레이닝 ::문자열 replace 활용 문제 (Str.translate(str.maketrans('abcd', '----', del))
활용 문제 1번
코딩 기초 트레이닝
Day 19 - (1) 세 개의 구분자
Lv.0
문제 내용
임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.
문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.
myStr result
"baconlettucetomato" ["onlettu", "etom", "to"]
"abcd" ["d"]
"cabab" ["EMPTY"]
문제 이해
Str.split('a').split('b').split('c') 이렇게 split를 연속으로 쓰는건 불가능하다.
에러가 발생하기 때문에, a, b, c를 다른 문자로 replace 하는 방법을 사용했다.
replace 메서드는 Str.replace('a', ' ').replace('b', ' ').replace('c', ' ') 이렇게 연속으로 사용이 가능하다.
내가 푼 코드
def solution(myStr):
answer = []
myStr = myStr.replace('a','-')
myStr = myStr.replace('b', '-')
myStr = myStr.replace('c', '-')
if set(myStr) == {'-'} :
return ["EMPTY"]
else :
list = myStr.strip('-').split('-')
for i in list :
if i != '' :
answer.append(i)
return answer
def solution(myStr):
myStr = myStr.replace('a','-')
myStr = myStr.replace('b', '-')
myStr = myStr.replace('c', '-')
return [i for i in myStr.split('-') if i != '' ] or ["EMPTY"]
def solution(myStr):
answer = [x for x in myStr.replace('a', ' ').replace('b', ' ').replace('c', ' ').split() if x]
return answer if answer else ['EMPTY']
나는 a, b, c 를 다른 문자로 치환했지만
b, c를 a 로 바꿔주고 a를 구분자로 둬서 짜르는 방법도 있다.
다른 코드
def solution(myStr):
s=myStr.replace('b','a')
s=s.replace('c','a')
s=s.split('a')
answer=[]
for x in s:
if x: answer.append(x)
if not answer:return ["EMPTY"]
return answer
-----------------------------------
활용 문제 2번
코딩 기초 트레이닝
Day 18 - (4) 문자열 바꿔서 찾기
Lv.0
문제 내용
문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다.
myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중
pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.
myString pat result
"ABBAA" "AABB" 1
"ABAB" "ABAB" 0
문제 이해
myString의 길이가 pat보다 길기 때문에 pat의 문자열을 replace 하는게 더 시간효율성에서 높다.
내가 푼 코드
def solution(myString, pat):
my = list(myString)
for i in range(len(my)) :
if my[i] == 'A' :
my[i] = 'B'
else :
my[i] = 'A'
return int(pat in ''.join(my))
def solution(myString, pat):
return int(''.join(['A' if i == 'B' else 'B' for i in pat]) in myString)
나는 a, b, c 를 다른 문자로 치환했지만
b, c를 a 로 바꿔주고 a를 구분자로 둬서 짜르는 방법도 있다.
다른 코드
def solution(myString, pat):
myString = myString.replace("A","C")
myString = myString.replace("B","D")
myString = myString.replace("C","B")
myString = myString.replace("D","A")
return 1 if pat in myString else 0
def solution(myString, pat):
return int(pat in myString.replace('A', 'C').replace('B', 'A').replace('C', 'B'))
-----------------------------------
Day-24 (4) l로 만들기
여러문자를 교체하는 str 메서드, 함수
str.translate 메서드
replace 메서드를 여러번 수행해야하는걸 한번에 처리해주는 메서드
문법 : str객체.translate(table)
str.maketrans() 함수
translate 메서드가 매개변수로 받는 table을 만드는 함수
문법 : str.maketrans(x [, y[, z]])
(함수나 메서드의 매개변수에 [, ]가 있으면 생략가능을 의미함)
① x : 변경될 문자들
② y : x의 각 문자에 대응하는 대체 문자들
③ z : 삭제될 문자들을 나타내는 문자열
a,b,c,d 각각을 - 문자로 대체하고 싶을때 이전에는 이렇게했었는데,
mystr.replace('a','-').replace('b','-').replace('c','-').replace('d','-')
테이블을 생성해서 이렇게 한번에 처리가 가능하다.
mystring.translate(str.maketrans('abcd', '----')
maketrans 함수로 테이블을 만들때, 3번째 매개변수(삭제)까지 이용하면 대체, 삭제까지 한번에 처리할 수 있다.
mystring.translate(str.maketrans('abc', '123', 'd'))
a는 1로, b는 2로, c는 3으로, d는 삭제를 시킨다.
maketrans 함수는 문자열을 1:1 매칭하는 것이기 때문에, 1:n 매칭할려면 replace가 더 적합
-----------------------------------
활용 문제 4번
코딩 기초 트레이닝
Day 24 - (2) 그림 확대
Lv.0
문제 내용
직사각형 형태의 그림 파일이 있고, 이 그림 파일은 1 × 1 크기의 정사각형 크기의 픽셀로 이루어져 있습니다.
이 그림 파일을 나타낸 문자열 배열 picture과 정수 k가 매개변수로 주어질 때,
이 그림 파일을 가로 세로로 k배 늘린 그림 파일을 나타내도록 문자열 배열을 return 하는 solution 함수를 작성해 주세요.
문제 이해
리스트로 바꿔서 값을 늘려야한다. 늘린 후에는 다시 문자열로 리턴해야함.
값을 늘리는 방법으로는 난 문자열 첫번째 인덱스를 k배한걸 다시 넣는 방식을 썼는데,
replace 메서드를 활용하는 방법이 더 효율적인 것 같다.
내가 푼 코드
def solution(picture, k):
answer = []
for idx, val in enumerate(picture) :
val = list(val)
for v_idx in range(len(val)) :
val[v_idx] *= k
answer += [''.join(val)] * k
return answer
replace로도 가능하다.
replace 메서드 코드
def solution(picture, k):
answer = []
for i in range(len(picture)):
for _ in range(k):
answer.append(picture[i].replace('.', '.' * k).replace('x', 'x' * k))
return answer
def solution(picture, k):
answer = []
for i in range(len(picture)):
answer += [picture[i].replace('.', '.'*k).replace('x', 'x'*k)] * k
return answer
-----------------------------------
함수의 마지막 return문을 작성할때, if - else문을 사용하거나 or을 사용해 효율적으로 코드를 작성할 수 있다.
return 문
return A or B
return [i for i in myStr.split('-') if i != '' ] or ["EMPTY"]
return stk or [-1]
return A if 조건문 else B
return answer if answer else ['EMPTY']
return stk if stk else [-1]
댓글
댓글 쓰기