[Python3] 프로그래머스 - 크기가 작은 부분 문자열 (문자열 거꾸로 출력)

민갱·2023년 6월 19일

CT

목록 보기
11/35

나..너무 돌아갔다, 타임아웃도 안나고 에러도 안나고 성공은 했는데,,,
다른 사람들 풀이보고 살짝 현타가 왔다.🥱
크기가 작은 부분 문자열

내 코드

from collections import deque
def solution(t, p):
    
    answer = 0
    list1 = []
    deq = deque(t)
    

    while len(deq) > len(p):
        tmp =''
        cnt = 0
        while cnt < len(p):
            tmp += deq[cnt]
            cnt += 1    
        list1.append(int(tmp))
        deq.popleft()

    
    list1.append(int(t[-len(p):]))

    for i in list1:
        if i <= int(p):
            answer +=1
            
    
    return answer
list1.append(int(t[-len(p):]))

인덱싱이 중요한 포인트 였던거 같다. 문자열 거꾸로 출력하는 개념을 공부했다.

1.반복문으로 뒤집어서 문자열 만들기

s = 'abcde'
s_reverse = ''  # 기존 문자열을 역순으로 담아줄 빈 문자열 선언
for char in s:
    s_reverse = char + s_reverse

print(s_reverse)  # edcba

2. 파이썬 제공 reverse()

s = 'abcde'
s_list = list(s)  # reverse 함수를 사용하기 위해 문자열을 list로 치환
s_list.reverse()  # reverse 함수를 사용해 문자열 리스트를 거꾸로 뒤집음

print(''.join(s_list))  # 거꾸로 뒤집어진 리스트를 연결해서 출력

3. 파이썬 제공 reversed()

s = 'abcde'
print(''.join(reversed(s)))  # 'edcba'

reversed는 reverse와는 달리 문자열에도 바로 적용이 가능하므로
(reverse는 list에만 사용 가능)

reversed(s)를 통해 문자열을 거꾸로 뒤집은 후 join으로 연결해 바로 출력해주었다.

4. 인덱싱

s = 'abcde'
print(s[::-1])  # 'edcba'

문자열을 [::-1] 이라는 인덱스로 호출하면,
아주 단순하게 해당 문자열을 뒤집은 결과를 반환한다.

s = 'abcde'
print(s[3:0:-1])  # dcb

만약 [3:0:-1] 이라는 인덱스로 호출하면,
3번 인덱스부터 1번 인덱스까지(0번 까지가 아님) 역순으로 출력해준다.

s = 'abcde'
print(s[3::-1])  # dcba

[3::-1] 과 같이 출력하면 3번 인덱스부터 0번 인덱스까지 역순으로 출력해준다.

s = 'abcde'
print(s[4::-1])  # edcba
print(s[::-1])  # edcba

[4::-1] 은 4번 인덱스부터 0번 인덱스까지 역순으로 출력해주는데,
이 때 4번 인덱스가 마지막 인덱스라면 생략할 수 있다.

l = ['a', 'b', 'c', 'd', 'e']
print(l[::-1])  # ['e', 'd', 'c', 'b', 'a']

t = ('a', 'b', 'c', 'd', 'e')
print(t[::-1])  # ('e', 'd', 'c', 'b', 'a')

그래서 결과적으로 [::-1] 인덱스를 주면 전체 문자열을 역순으로 출력해주는 것이다.
문자열 뿐 아니라 리스트나 튜플에도 적용 가능하다.

다른사람 풀이

def solution(t, p):
    
    a = len(t) #t의 길이
    b = len(p) #p의 길이
    answer = 0
    
    for i in range(0,a-b+1):
        if int(t[i:i+b]) <= int(p):
            answer += 1
    return answer
    
 -----------------------
 def solution(t, p):
    return len([1 for i in range(len(t)-len(p)+1) if t[i:i+len(p)] <= p])
profile
가보자고

0개의 댓글