[Swift 코테] 백준 1316 그룹 단어 체커

2022. 3. 17. 16:30Swift 코딩테스트/Swift 백준 문제 풀이

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