반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 프로그래머스 - 체육복 문제를 풀었습니다.
목차
Github
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42862
풀이
해당 문제의 분류는 탐욕법이라고 되어 있습니다.
하나하나 하다 보면 정답이 유추된다는 개념이던데 말로 하기 힘든 것 같네요.
참고로 아래 전체 코드는 제 나름대로의 코드를 작성해서 정답을 맞고 다른 사람의 코드를 참고하여 리펙토링 했습니다.
문제 포인트
첫 번째 포인트는 여벌이 있는 사람도 도난을 당할 수 있다는 점입니다.
따라서 lost와 reserve 배열에서 중복된 값을 제거해서 정말 잃어버린 사람, 정말 대여해줄 수 있는 사람을 구해야 합니다.
두 번째 포인트는 input은 정렬되었다는 언급이 되지 않았다는 점입니다. 따라서 위에서 구한 배열들을 정렬해야 합니다.
마지막으로 순서대로 앞 사람만 빌려주는 경우, 뒷사람만 빌려주는 경우를 따로 생각하면 안 된다는 점입니다.
이 세 가지만 고려해서 코드를 작성하면 해결할 수 있을 것 같습니다.
전체 코드
import Foundation
func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
let losted = lost.filter{ !reserve.contains($0) }.sorted()
var reserved = reserve.filter{ !lost.contains($0) }.sorted()
var result = n - losted.count
for lost in losted {
for i in 0..<reserved.count {
if lost == reserved[i]-1 || lost == reserved[i]+1 {
reserved.remove(at: i)
result += 1
break
}
}
}
return result
}
let n = 5
let lost = [2, 4]
let reserve = [3]
print(solution(n, lost, reserve))
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형