728x90
처음으로 Swift를 지원하지 않는 문제를 풀어보았다... 스터디하면서 나온 문젠데 어쩌다 보니 여기까지..?
기본으로 제공하는 테스크케이스와 몇가지 넣어서 돌려봤는데 일단 답이 나온다...! 그러나 전부 맞는지 확인해보지는 않았기 때문에 좀 찝찝 ^-^...
⛔️ 따라서 이 코드가 맞는 코드가 아님을 주의해주세요! ⛔️
이 문제를 풀면서 생각한 논리적 흐름은
- 우선 올림차순으로 정리한다.
- 이 때 가장 가벼운 순으로 보트에 태우고 다음 사람들을 태울 수 있는지 확인한다.
- 그리고 추가로 태울 수 있는 사람들 중에 가장 limit 값에 가까운 무게를 가진 사람을 태운다.
- 이렇게 가장 효율적인 방식으로 두 명이 한 번에 강을 건넌다.
- 그 후 배를 다시 초기화 시켜주고 count는 올려준다.
* 코드
import Foundation
func solution(_ people: [Int], _ limit: Int ) -> Int {
var arrPeople = people.sorted()
var boat: [Int] = [0, 0]
var count = 0
// arrPeople의 원소 삭제, 0 대입 후 다시 값을 확인하기 위해 for문을 크게 돌림
for _ in 0... {
// 배열의 원소가 전부 0이면 break
if arrPeople.reduce(0, +) == 0 { break }
for i in 0..<arrPeople.count {
var idx = 0 // 가장 큰 값을 갖게 만든 수가 있던 자리
var temp = 0 // 가장 큰 값을 갖게 만드는 수를 찾기 위해 비교할 임시값
boat[0] = arrPeople[i]
arrPeople.removeFirst()
for j in 0..<arrPeople.count {
if boat[0] + arrPeople[j] >= temp && boat[0] + arrPeople[j] <= limit {
temp = boat[0] + arrPeople[j]
boat[1] = arrPeople[j]
idx = j
}
}
// 보트의 두번째 칸에 다른 값이 동승했을 때만 0을 넣어줌. 이렇게 하지 않으면 뒤에 0으로 바꿔준 값들이 엉켜서 오류 발생
if boat[1] != 0 {
arrPeople[idx] = 0
}
boat = [0, 0]
count += 1
break
}
}
return count
}
정리(Today I Learned)
- 애초에 For문이 많이 겹쳐서 시간복잡도는 포기하고 푼 문제... 그래도 뭔가 Swift를 지원해주지 않는 문제를 Swift로 풀어봐서 재밌었다. :)
'TIL > 알고리즘 공부' 카테고리의 다른 글
LeetCode Swift - 134. Gas Station_Greedy (4) | 2023.02.09 |
---|---|
LeetCode Swift - 611. Valid Triangle Number_Greedy (0) | 2023.02.09 |
백준 1931번 Swift 알고리즘 연습 - 회의실 배정_그리디 (0) | 2023.02.06 |
백준 1541번 Swift 알고리즘 연습 - 잃어버린 괄호_그리디 (0) | 2023.02.06 |
백준 10610번 Swift 알고리즘 연습 - 30_그리디 (0) | 2023.02.04 |