[Level 1] 체육복 + Swift

sanghee·2021년 8월 26일
0

🙈코딩테스트

목록 보기
3/52
post-thumbnail

체육복

코딩테스트 연습 - 체육복

탐욕법(Greedy)

미래를 생각하지 않고 각 단계에서 가장 최선의 선택을 하는 기법이다. 해결책이 최선이라는 걸 보장하진 않는다.

풀이

  1. students라는 새로운 배열을 만들었다.
  2. 잃어버린 상태면 해당 인덱스에서 1을 뺐다.
  3. 여벌의 체육복이 있는 상태면 해당 인덱스에서 1을 더했다.
  4. 배열에서 0이상의 값의 개수를 구한다.
func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
    var students = Array(repeating: 0, count: n)
    
    for i in lost { students[i - 1] -= 1 }
    for j in reserve { students[j - 1] += 1 }
    
    for (i, v) in students.enumerated() {
        if v == -1 {
            if i > 0 && students[i - 1] == 1 {
                students[i - 1] -= 1
                students[i] += 1
            } else if i < n - 1 && students[i + 1] == 1 {
                students[i + 1] -= 1
                students[i] += 1
            }
                
        }
    }
    return students.filter{$0 >= 0}.count
}

깃허브 커밋 주소

GitHub - 체육복

profile
👩‍💻

0개의 댓글