개발/Swift
[Swift 코딩테스트] 프로그래머스 - 체육복
덤벨로퍼
2021. 11. 29. 18:50
문제를 해결하기 위해 처음 생각했던것은
1.우선 멀쩡한 놈들을 계산한다. (전체 학생수 - lost 배열 길이)
lost 배열을 반복문 돌린후에
2.Lost 배열 앞에번호를 가지고 reserve에 있는지 확인
3.없으면 뒷번호 reserve에 있는지 확인하여
4.있으면 count를 1 증가시키는 방식이었다.
몇가지 테스트에 합격하지 않아 추가적으로
1.주어진 배열두개를 정렬함
2.여벌이있는데 도난당한경우 해당 번호를 두 배열에서 제거함 (여벌도없고 잃어버리지도 않은 상태임)
이 두 로직을 추가하여 해결하였다.
import Foundation
func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
var reserveList = reserve
var lostList = lost
//정렬
lostList.sort()
reserveList.sort()
//여벌+도난의 경우 배열에서 제거
for reserveItem in reserveList {
if let lostIndex = lostList.firstIndex(of:reserveItem),
let reserveIndex = reserveList.firstIndex(of: reserveItem) {
reserveList.remove(at: reserveIndex)
lostList.remove(at:lostIndex)
}
}
//일단있는놈 계산 전체학생 -lost
var count = n - lostList.count
//lost 주변에 reserve있늕지 확인
for lostIndex in lostList {
if let index = reserveList.firstIndex(of:lostIndex - 1) {
reserveList.remove(at:index)
count += 1
}else if let index = reserveList.firstIndex(of:lostIndex + 1) {
reserveList.remove(at:index)
count += 1
}
}
return count
}