관리 메뉴

이 세계에선 내가 개발자?

[11656/Swift] 접미사 배열 본문

알록리즘/BAEKLOG

[11656/Swift] 접미사 배열

민디고 2023. 4. 24. 17:15

*** 언어는 Swift! ***

 

이번에는 제목부터 여러운 11656번 접미사 배열이라는 문제였다. 

자세한 문제는 아래와 같다🤭

 

접미사.. 접미사.. 가 뭐지 라고 고민을 하다가 네이버느님의 손을 빌려보기로 했다.

접미사는 어근이나 단어의 뒤에 붙어서 새로운 단어를 만드는 역할을 한다.

네..? 네..? 더 모르겠는데요..?

그래서 접미사의 뜻을 찾는 건 포기하고 그냥 문제를 읽어보기로 했다.

 

그냥 문제 자체로 이해하자면 한 단어가 있으면 예를 들어 apple 이라는 단어가 있으면 접미사는 

apple

pple

ple

le

e

요런식으로 문자 하나씩 빠지며 만들어지는 것 같은데 이걸 왜 접미사라 하지? 암튼 이 친구들을 사전 순으로 말 그대로 a, b, c 순으로 정렬하라는 문제였다.

 

자 그럼 이번에도 문제를 이해하기 위해 하나 씩 쪼개보자

 

1. 문자열 S를 입력받는다.

2. 각각의 문자의 배열을 만들고 앞에서부터 한 자리씩 빼서 배열로 만든다.

3. 오름차순으로 정렬한다.

 

이번에는 그냥 문제만 보고 내가 이해한 만큼 쪼개보았다. 자 그럼 쪼갠것처럼 코딩을 시작해보자 레츠고🤙

 

1. 문자열 S를 입력받는다.

자 이제는 너무나도 많이 해본 S를 입력받아 보자

let s = readLine()!

마찬가지로 밑에서 바로 사용하기 위해 강제 언래핑을 시켜주었다. 

여기서는 빠른 처리를 위해서 썼지만 강제 언래핑을 남발하는 건 좋지 않다는 점~!🥸

 

2. 각각의 문자의 배열을 만들고 앞에서부터 한 자리씩 빼서 배열로 만든다.

이 부분 부터 내가 이해한 대로 만들어보기 시작했다.

문제의 예제 입력과 예제 출력을 딱 보았을 때 결과적으로는 문자가 각각의 문자로 나눠진 뒤 앞에서부터 하나씩 없어지며 문자열을 다시 만들어주고, 그 문자열을 가지고 오름차순으로 정렬하는 것처럼 보였다.

 

그래서 일단 입력받은 문자열을 각각의 문자 배열로 만들어준다.

let stringArray = s.map { String($0) }

 

그 다음 조금 복잡하긴 한데 하나씩 이야기해보자

먼저, 문자가 하나씩 빠진 문자열을 저장하기 위한 array를 만든다. 그리고 문자를 하나씩 빼기 위한 index 를 가지고 있을 변수도 하나 만들어준다.

var suffiexsArray: [String] = []
var suffixeIndex = 0

그리고 문자 배열만큼 for 문을 돌려주며 접미사 배열을 만들어 준다.

for _ in 0..<stringArray.count {
    var tempString = ""
    for j in suffixeIndex..<stringArray.count {
        /// index 부터 끝까지 String 만들어서
        tempString += stringArray[j]
    }
    /// 배열에 넣고
    suffiexsArray.append(tempString)
    suffixeIndex += 1
}

 

하나씩 보자면 안의 for 문은 문자를 하나씩 빼기 위해 존재하는 for문이다.

만약 a p p l e 라는 문자 배열이 있다면 suffixeIndex가 0부터 시작하니 첫번째 자리에는 apple이 들어가게 된다.

그 다음으로 suffixeindex가 1이 올라가 1이 되면 j는 1부터 문자 배열 갯수 - 1 까지 돌게된다. 그렇게 되면 두번째는 pple 이 출력되게 된다.

그렇게 계속해서 2부터 문자 배열 갯수 - 1 까지 ple, 3부터 문자 배열 갯수 - 1 까지 le, 이런식으로 만들어지게 된다.

 

그런데 이 값들은 각각의 배열에 따로 따로 존재하기 때문에 합쳐주기 위해 tempString을 이용해 문자열로 합쳐준 뒤 suffiexsArray에 넣어준다.

 

3. 오름차순으로 정렬한다.

마지막으로 만들어진 접미사 배열을 오름차순으로 정렬하기 위해 sorted 를 이용한 후 배열을 joined를 이용해 합쳐준다.

print(suffiexsArray.sorted(by: <).joined(separator: "\n"))

 

이렇게 하면 apple을 입력해주었을 때 

apple

e

le

ple

pple

 

이렇게 결과가 나오게 된다!

이번에도 한 건 해결!😜

'알록리즘 > BAEKLOG' 카테고리의 다른 글

[1920/Swift] 수 찾기  (0) 2023.05.03
[1457/Swift] 방 번호  (0) 2023.04.28
[9093/Swift] 단어 뒤집기  (0) 2023.04.24
[1427/Swift] 소트인사이드  (1) 2023.04.18
[1292/Swift] 쉽게 푸는 문제  (0) 2023.04.18