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
}
'Swift랑 친해지기 > programmers 풀기' 카테고리의 다른 글
[프로그래머스] 푸드 파이트 대회 (Swift) (0) | 2022.12.14 |
---|---|
[프로그래머스] 콜라 문제 (Swift) (0) | 2022.12.13 |
[프로그래머스] 할인 행사 (Swift) (0) | 2022.12.11 |
[프로그래머스] 귤 고르기 (Swift) (0) | 2022.12.09 |
[프로그래머스] n^2 배열 자르기 (Swift) (2) | 2022.12.08 |