WonniOS

[Swift] 백준 11656번 : 접미사 배열 본문

Algorithm

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

Wonni 2023. 4. 24. 04:25

WWDC가 끝나고 간만에 푼 문제..

막힘 없이 풀긴 풀었는데 시간과 메모리를 너무 잡아먹은 좋지 않은 풀이였다..


문제 링크

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

 

11656번: 접미사 배열

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

www.acmicpc.net

 


풀이

본문내용넣기

 

 

 

 

 


 

풀이

우선 접미사를 뽑아내기 위해서 prefix() 메소드를 사용했다.

prefix(maxLength: Int) 메소드는 Array의 인스턴스 메소드이지만 리턴타입은 ArraySlice이다. 

그래서 나는 joined처리를 해주어서 string으로 바꿔주었고, reversed()를 하지 않으면 예시인 baekjoon에서 접미사가

b, ba, bae, baek... 이렇게 맨 처음을 계속 포함하기 때문에 아예 reversed를 해주어서 baekjoon을 noojkeab로 바꾸어주었다.

그리고 난 뒤엔, sort를 이용해 알파벳 순서로 정렬해주었다.


 

제출 코드

 let input = readLine()!.map{String($0)}.reversed()
 var arr: [String] = []
  for i in 1...input.count {
      var subSequence = input.prefix(i).reversed().joined(separator: "")
      arr.append(subSequence)
    }
    
   arr.sort()
    
   for i in 0..<arr.count {
      print(arr[i],terminator: "\n")
    }

 

수정 코드

let S = readLine()!
var arr = [String]()
  for i in S.indices{
    arr.append(String(S[i..<S.endIndex]))
  }
print(arr.sorted().joined(separator: "\n"))

다른 사람의 풀이를 보니 아주 간결하게 잘 푼 풀이가 있었다.

indeices로 안전하게 배열을 탐색하면서 바로 String으로 변환해서 배열에 넣어주었다..

그리고 바로 print하면서 sort처리 해버리기...