Swift 코딩테스트/Swift 백준 문제 풀이
[Swift 코테] 백준 1316 그룹 단어 체커
ㄱ ㅅ ㄱ
2022. 3. 17. 16:30
728x90
배열과 집합의 인덱스를 활용해 문제를 풀었습니다.
1. 배열의 중복 요소를 제거한 집합을 만들고
2. 집합의 요소를 기준으로 배열에서 해당 요소의 처음, 마지막 인덱스를 구조체에 저장합니다.
3. 구조체를 처음 인덱스를 기준으로 정렬한 후
4. 해당 요소의 마지막 인덱스와 다음 요소의 처음 인덱스를 비교합니다.
5. lastIndex < firstIndex 라면 count += 1
6. lastIndex > firstIndex 라면 return false
코드
import Foundation
struct order{
var start: Int
var end: Int
}
var num = Int(readLine()!)!
var count = 0
for i in 0..<num{
var line = readLine()!
groupWord(s: line)
}
func groupWord(s: String) -> Bool{
var arr = Array(s)
var set = Set(arr)
var comp = [order]()
for j in set{
comp.append(order(start: arr.firstIndex(of: j)!, end: arr.lastIndex(of: j)!))
}
comp = comp.sorted(by: {$0.start
< $1.start})
for k in 0..<set.count - 1{
if comp[k].end > comp[k + 1].start{
return false
}
}
count += 1
return true
}
print(count)
728x90