Where who wants to meet someone

백준 Swift [11478] 서로 다른 부분 문자열의 개수 본문

백준 알고리즘 문제 기록/집합과 맵

백준 Swift [11478] 서로 다른 부분 문자열의 개수

Lust3r 2023. 8. 11. 18:09
728x90

난이도

실버 III

 

문제

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

 

11478번: 서로 다른 부분 문자열의 개수

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

www.acmicpc.net

 

내 답안

let input = readLine()!.map { $0 }

var stringSet = Set<String>()

for i in 0..<input.count {
    var string = ""
    for j in i..<input.count {
        string += String(input[j])
        stringSet.insert(string)
    }
}

print(stringSet.count)
  • 각각의 글자를 숫자를 늘려 Set에 저장하면 중복된 값이 제거되기에 그 방식을 사용
  • index를 사용하는 방식을 고려해 for문을 썼지만, 1글자~5글자 하나씩만 저장이 되는 것을 보고 규칙을 찾으려 하였음
    예제를 보니 한 글자는 글자 수만큼, 글자수가 늘어날 수록 개수는 1씩 감소되는 것을 확인하였고
    2중 for문을 사용하여 첫 번째 for문의 i는 글자 수, 두 번째 for문의 j는 인덱스로 하여 문자열을 추출하였다
  • 하지만 이 역시도 이전 인덱스의 문자열은 빠지게 되기에 string을 첫 번째 for문에 넣어 글자 수가 바뀔 때마다 초기화가 되게 하고, 거기에 글자를 추가하여 사용할 수 있도록 했다.