Day10 문자열

  • 문자열의 앞의 n글자
  • 접두사인지 확인하기
  • 문자열 뒤집기
  • 세로 읽기
  • qr code

문자열 앞의 n글자

문제 설명

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

 

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

 


접두사인지 확인하기

문제 설명

어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다.문자열 my_string과 is_prefix가 주어질 때, is_prefix가 my_string의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.

 

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

 

 

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

다른 사람 풀이 : find 함수를 이용해서도 풀 수 있구나


문자열 뒤집기

문제 설명

문자열 my_string과 정수 s, e가 매개변수로 주어질 때, my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(my_string, s, e):
    t = len(my_string)
    start = t-e
    end = t-s
    answer = my_string[:s] + my_string[-start:-(end+1):-1] + my_string[e+1:]
    return answer

문자열 뒤집기 며칠 전에 문제 풀었었는데,,, 어떻게 풀었는지 기억이 안났음

뒤집기를 어떻게 할까 고민하다가 "전체길이에서 s, e 뺀 길이로 음수인덱스 사용하자" 하고 생각해낸 .. 

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

그리고 기억난 문자열 뒤집기 방법 .. [::-1] 하나면 되는데 이게 기억이 안나서 ㅋㅋㅋㅋㅋㅋ


세로 읽기

문제 설명

문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.

 

def solution(my_string, m, c):
    answer = ''
    new = [my_string[i:i+m] for i in range(0, len(my_string), m)]
    return ''.join([i[c-1] for i in new])

반복문에서 증가하는 크기를 m만큼 잡고, 슬라이싱을 [i : i+m]해서 m의 길이만큼 자른다.

i = 0, 4, 8, 12 ... 

i+m = 4, 8, 12, 16 ...

m개씩 슬라이싱되는 것을 알 수 있음

이후 c번째 인덱스를 구함. 인덱스는 0부터 시작하기 때문에 c번째 값을 구하고 싶으니 c-1

def solution(my_str, m, c):
    return my_str[c-1::m]

다른 사람 풀이 : 

생각보다 꽤 오래 고민했는데 .... 이런 풀이보면 진짜 허무해지는 것 같음

사실 저렇게 슬라이싱하는 방법을 몰랐음 애초에 ..

my_str[c-1::m]
문자열 my_str에서 c-1 번째 인덱스부터 시작하여 m 간격으로 문자를 선택
c-1 : 시작 인덱스
m : 간격(m만큼의 간격으로 슬라이싱)
def solution(my_string, m, c):
    answer = ''
    for i in range(c-1,len(my_string),m): answer+=my_string[i]
    return answer

좀 더 나은(?) 코드라고 생각한 것

c-1부터 m 간격으로 문자를 선택하며 반복

그럼 내가 구하고자 하는 값은 항상 i번째 인덱스에 있음.


qr code

문제 설명

두 정수 q, r과 문자열 code가 주어질 때, code의 각 인덱스를 q로 나누었을 때 나머지가 r인 위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

def solution(q, r, code):
    return ''.join([code[i] for i in range(len(code)) if i % q == r])

 


다른 건 난이도가 ... 갑자기 낮아진 느낌인데 세로 읽기 문제에서 막혔다.

계속 슬라이싱하는 문제만 풀어서 그런지 슬라이싱으로만 생각해서 좀 오래걸린 것 같다

문자열 슬라이싱할 때 > 반복문 간격 설정 ... 활용하면 쉽다. 하하

+ Recent posts