[Swift] [프로그래머스 1단계] 체육복자료구조와 알고리즘/알고리즘2022. 8. 4. 23:14
Table of Contents
다풀고나서 문제의 유형에 대해 타입을 보니 greedy 였다
처음의 시도는 아무생각없이 Dictionary를 사용하였는데, 우선 문제는 Array에 비용이 높고 optional에 대한 처리도 해줘야 하는 것을 나중에 알았다... 문법에 대해서 익힐 겸 코딩테스트도 할 겸 배워나가는 단계에서 이렇게 무너지고 Array로 다시 풀이를 하였다
import Foundation
func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
var result = Array(repeating: 0, count: n+2)
for res in reserve { result[res] += 1 }
for los in lost { result[los] -= 1 }
for i in 1...n {
if result[i] == 1 && result[i - 1] == -1 {
result[i] = result[i - 1] = 0
} else if result[i] == 1 && result[i + 1] == -1{
result[i] = 0
result[i + 1] = 0
}
}
result.sort()
return n - result.firstIndex(of: 0)!
}
우선 Array의 크기를 2 증가 시켜서 만들어서 앞, 뒤 학생에 대한 예외 처리를 안하도록 만듭니다.
그리고 reserve 의 학생들은 여벌의 옷 체크, lost 의 학생들의 도난당한 옷 체크
옷이 없는 학생은 Array [몇 번째 학생] = -1 로 체크가 되었을 것이며,
여벌의 옷이 있는 학생은 Array [몇 번째 학생] = -1 로 체크가 되었을 것입니다.
그리고 반복문을 돌면서 여벌의 옷이 있는 학생의 번호 앞, 뒤로 옷이 없는 학생을 찾습니다.
옷을 빌려주는 것에 대해서 값을 반영합니다.
배열을 한 번 정렬해주면서, 옷이 없는 학생을 앞으로 몰아줍니다.
firstIndex 메소드를 통해 0을 찾으면 옷이 없는 학생의 인원을 찾을 수 있기에 총 학생 - 옷이 없는 학생 수를 반환합니다.
모두가 여벌의 옷이 있어도 처음에 Array 크기가 2를 늘렸기 때문에 값이 0이 있는 Index는 존재합니다.
(예외적으로 nil이 나오지 않게 주의)
'자료구조와 알고리즘 > 알고리즘' 카테고리의 다른 글
[Swift] [leetcode] Implement strStr ... etc (0) | 2022.08.09 |
---|---|
[Swift] [leetcode] Palindrome Number ... etc (0) | 2022.08.07 |
[Swift] [프로그래머스 1단계] 키패드 누르기 (0) | 2022.08.06 |
9461 백준 문제풀이 (C언어) (0) | 2021.04.29 |
1904 백준 문제풀이 (feat. 동적계획법) (0) | 2021.04.28 |
@jaewpark :: 코스모스, 봄보다는 늦을지언정 가을에 피어나다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!