Swift랑 친해지기/programmers 풀기

[프로그래머스] 체육복 (Swift)

데브킹덕 2022. 12. 12. 18:34

https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

변수 설정

  • nArray = 요소 1을 n개 갖는 Int형 배열 
  • result = 체육복을 가질 수 있는 최대값

 

내 풀이

 

1. 요소 1을 n개 갖는 Int형 배열 nArray를 만들었음

1은 체육복을 가지고 있는 사람들임

 

2. reverse 배열을 확인하면서 체육복을 2개 가지고 있는 사람들을 2로 증가시킴

*체육복을 2벌가지는데 도난당한 사람도 있으므로 lost배열을 확인하기 전에 확인해야함 

 

3.lost 배열을 확인하면서 도난당한 사람의 체육복을 감소시킴

기본적으로 2벌인 사람은 1로, 1인사람은 0으로 바꿈

*if else 문을 사용안하고 nArray[i-1] -= 1 을 사용해도 될듯..

 

4. 체육복 두벌인 사람이 없는 사람을 빌려줌

경우의 수

1. 체육복이 없는데 0번째 인덱스임 -> 뒤에 인덱스 1이 2벌을 가지고 있다면 0번째 인덱스를 빌려주고 자신은 1로 감소해야함

2. 체육복이 없는데 범위가 1번째 ~ 마지막 전에 인덱스 -> 앞에 인덱스나 뒤에 인덱스가 2일 경우 체육복을 빌림

*빌렸는데 또 빌리지 않도록 유의

3. 체육복이 없고 마지막 인덱스임 -> 앞에 인덱스가 2벌일 경우 1벌을 빌리도록함

 

5. nArray를 돌면서 체육복의 수가 1이거나 2일 경우 result 의 값을 1증가시켜 반환하도록 함

 

 

import Foundation

func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
    
    var nArray = Array(repeating: 1, count: n)
        
    for i in 0..<reserve.count{
        nArray[reserve[i]-1] = 2
    }
    
    for i in 0..<lost.count{
        if nArray[lost[i]-1] != 2{
            nArray[lost[i]-1] = 0
        }else{
            nArray[lost[i]-1] = 1
        }
    }
    
    for i in 0..<nArray.count{
        if i == 0 && nArray[i] == 0{
            if nArray[i+1] == 2{
                nArray[i+1] -= 1
                nArray[i] += 1
            }
        }else if i != 0 && i < nArray.count - 1{
            if nArray[i] == 0{
                if nArray[i-1] == 2{
                    nArray[i-1] -= 1
                    nArray[i] += 1
                }else if nArray[i+1] == 2{
                    nArray[i+1] -= 1
                    nArray[i] += 1
                }
            }
        }else if i == nArray.count - 1 && nArray[i] == 0{
            if nArray[i-1] == 2{
                nArray[i-1] -= 1
                nArray[i] += 1
            }
        }
    }

    var result = 0
    for i in nArray{
        if i == 1 || i == 2 {
            result += 1
        }
    }
    return result
}