본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 접미사 배열 : 11656번 - Python

728x90
반응형

https://www.acmicpc.net/problem/11656

 

11656번: 접미사 배열

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다.

www.acmicpc.net

 

 

 

문제를 풀면서 몰랐던 개념

 

(1) 인덱스를 사용해서 삭제하려면 remove 함수가 아니라 pop 함수를 사용해야 한다는 점.

-> remove(값), pop(인덱스)

 

(2) [Python] 문자열 슬라이싱

-> 시작 위치와 끝 위치를 지정하여 원하는 만큼 문자열을 잘라서 출력

>>> str = 'abcdefg'

>>> print(str[2:])
cdefg
>>> print(str[:2])
ab
>>> print(str[2:3])
c
>>> print(str[2:6])
cdef
>>> print(str[:-1])
abcdef
>>> print(str[-1:])
g
>>> print(str[-3:-4])

>>> print(str[-3:-1])
ef
>>> print(str[-3:0])

>>> print(str[-3:])
efg

 

 

 

문제의 접근 방법

 

- 문자열 S 입력받기

- 반복문을 이용해서 문자열 슬라이싱으로 모든 접미사 출력

- 모든 접미사를 리스트에 넣은 후 정렬

 

 

내가 막혔던 부분

 

(1) 문자열 슬라이싱을 생각하지 못함.

-> 입력받은 문자열을 알파벳 단위로 하나씩 분리해서 리스트에 넣은 후, pop 함수를 통해서 0번째 인덱스부터 제거하려고 했다. 그 후, 정렬해서 출력하려는 방식으로 접근했다.

 

 

 

문제 풀이 방법

 

문자열 S를 입력받기 -> S의 길이만큼 반복문을 돌려서 i번째 요소부터 출력되게 슬라이싱을 걸어준다 -> 그 모든 접미사들을 arr 리스트에 추가해준다 -> 만들어진 접미사들이 모여있는 새로운 리스트 arr를 정렬해준다 -> 출력형식에 맞게 출력!

 

 

 

소스코드

S = str(input())
n = len(S)
arr = []

for i in range(n):
    arr.append(S[i:])
arr = sorted(arr)

for i in arr:
    print(i)
728x90
반응형