반응형

백준 11478번 문제입니다. (solved.ac)기준 실버 3 문제입니다.

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

 

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

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

www.acmicpc.net

문제

문제 접근

문자열 s를 입력받고 s의 서로 다른 부분 문자열의 개수를 구하는 문제입니다. 문자열의 길이가 1,000 이하라고 문제에 제시되어 있어서 2중 반복문을 사용하고, substring함수를 이용하여 모든 부분 문자열을 찾도록 하였습니다. substringSet이라는 집합 자료구조를 String 타입의 MutableSet으로 만들고 위에서 찾은 모든 부분 문자열을 add 해주도록 하였습니다! 집합 자료구조인 MutableSet은 이미 해당 자료구조에 동일한 원소가 있으면 add를 해도 추가되지 않는 것을 이용하였습니다.(동일 원소 중복 안됨)

MutableList를 만들고 해당원소가 MutableList안에 있는지 확인 후 넣어주는 작업을 진행해도 문제는 해결할 수 있지만 집합 자료구조를 사용하는 것이 좋아 보입니다.

정답 코드

fun main(){

    val s = readln()
    val substringSet = mutableSetOf<String>()

    for (start in 0 .. s.length){

        for (end in start+1 .. s.length){

            substringSet.add(s.substring(start,end))

        }
    }
    println(substringSet.size)
}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기