Day9 문자열

  • 배열 만들기 5
  • 부분 문자열 이어 붙여 문자열 만들기
  • 문자열 뒤의 n글자
  • 접미사 배열
  • 접미사인지 확인하기

배열 만들기 5

문제 설명

문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다.배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해 주세요.

def solution(intStrs, k, s, l):
    answer = []
    for i in intStrs:
        intList = list(i)
        res = ''.join(intList[s:s+l])
        if int(res) > k:
            answer.append(int(res))
    return answer

이것저것 형변환을 많이 사용한 것 같다. 생각해보니 리스트로 변환할 것 없이 문자열 자체를 슬라이싱하면 되는데 왜 리스트로 변환해서 슬라이싱 할 생각을 했지 . .ㅎㅎ

 

def solution(intStrs, k, s, l):
    return [int(intstr[s:s+l]) for intstr in intStrs if int(intstr[s:s+l]) > k]

다른 사람 풀이 :

문자열을 바로 슬라이싱해서 int로 변환하고, 조건문으로 값이 k 이상인 값들만 뽑아냈다. 굿굿.. 


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

문제 설명

길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_string[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(my_strings, parts):
    answer = ''
    for i in range(len(my_strings)):
        answer += my_strings[i][parts[i][0]:parts[i][1]+1]
    return answer

my_strings와 parts의 길이가 같고, 같은 인덱스 안의 값들을 사용하는 것이므로 인덱스를 활용하려고 생각하며 풀었다.

한번에 풀려고 하지 않고 하나하나 해석하면서 푸니까 좀 더 빨리 풀리는 듯!

def solution(my_strings, parts):
    answer = ""
    for i, (s, e) in enumerate(parts):
        answer += my_strings[i][s:e+1]
    return answer

다른 사람의 좀 더 간단한 풀이, enumerate 함수도 잘 사용하면 유용한 것 같다.


문자열의 뒤의 n글자

문제 설명

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string의 뒤의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(my_string, n):
    return my_string[-n:]

음수 인덱스 사용해서 문자열 뒤에서부터 슬라이싱 !


접미사 배열

문제 설명

어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(my_string):
    return sorted([my_string[i:] for i in range(len(my_string))])

인덱스 0부터 +1씩 문자열 슬라이싱 > 사전순으로 정렬


접미사인지 확인하기

문제 설명

어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.문자열 my_string과 is_suffix가 주어질 때, is_suffix가 my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.

 

def solution(my_string, is_suffix):
    lst = [my_string[i:] for i in range(len(my_string))]

    return 1 if is_suffix in lst else 0

방금 푼 물제에 조건문만 붙여서 접미사 배열 안에 해당 접미사가 있는지만 확인하여 1, 0 리턴

def solution(my_string, is_suffix):
    return int(my_string.endswith(is_suffix))

다른 사람 풀이:

endswith 함수는 문자열이 특정 접미사로 끝나는지 여부를 확인하는 파이썬의 문자열 메서드
특정 접미사로 끝나면 True를 반환하고, 그렇지 않으면 False를 반환

 

endswith 함수를 사용해서 바로 답을 낼 수도 있었다 .. ㄷㄷ!

내가 모르는 함수 왜이리 많은지

def solution(my_string, is_suffix):
    return int(my_string[-len(is_suffix):] == is_suffix)

또 신박하다고 생각했던 풀이는

접미사 배열 안에 is_suffix의 길이와 같은 값을 구하고 이를 is_suffix와 비교하는 것


어제는 한문제를 한시간 넘게 풀어서 거의 총 3시간을 소요했는데 오늘은 또 난이도가 낮아서 금방 풀었다.

할 건 많은데 알고리즘은 시간이 얼만큼 소요될지 모르니까 빨리 끝나는 날엔 시간을 번 것 같고,

늦게 끝나는 날엔 시간을 빼앗긴 느낌이다 ㅋㅋㅋㅋㅋ 나만 그런게 아니겠지 ..! 

앞으로 난이도가 점점 더 올라갈텐데 ,, 꾸준히 하다보면 그래도 훨씬 실력이 좋아지지 않을까 ?

아무튼 오늘은 빨리 끝나서 기분이 좋다.. 얼른 다른 할 일 청산하러 가야지

+ Recent posts