이 세계에선 내가 개발자?
[11656/Swift] 접미사 배열 본문
*** 언어는 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 |