안녕하세요 gyub(귭)입니다 ㅎㅎㅎ
요즘 자소서 작성하고 개인 프로젝트를 하느라
바빠서 자세히 설명은 못해드리지만 주석을 달아놨습니다!
(원래는 자세하게 했던거처럼 말하지만... 사실 개인 공부 목적이라ㅎ;;)
class Solution {
private lateinit var numberOfClothes: IntArray
fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
var answer = 0
// size: 전체학생수, 가지고 있는 옷 개수 ( 0, 1, 2)
// 1벌씩 가지고 있다고 초기화
// -> 여벌 옷을 가진 학생은 하나만 도난 당했다고 가정했으므로
// -> 여벌옷은 2개를 가진상태로 도난을 당했으면 1벌이므로 자신만 입을 수 있고
// -> 도난을 당하지 않았으면 2벌을 가졌으므로 1벌을 줄 수 있다.
numberOfClothes = IntArray(n) { 1 }
// 여벌 옷 가진 학생들 옷 개수 ++ => 2
reserve.forEach {
numberOfClothes[it - 1]++
}
// 도난 당한 학생들 옷 개수 -- => 0 or 1
lost.forEach {
numberOfClothes[it - 1]--
}
// 전체 학생 수 만큼 반복
for (i in numberOfClothes.indices) {
// 도난 당한 학생들만 처리하면 되므로 옷이 0개인 학생들만 검사
if (numberOfClothes[i] == 0) {
// // 첫번째 학생은 다음 번호 학생하고만 비교
if (i == 0) {
// 다음 번호 학생이 여벌의 옷을 가지고 있다면
// 즉 2벌인 경우에
if (numberOfClothes[i + 1] == 2) {
// 옷을 받으므로 ++ => 1
numberOfClothes[i]++
// 옷을 빌려주므로 -- => 1
numberOfClothes[i + 1]--
}
// 마지막 학생은 이전 번호 학생하고만 비교
} else if (i == numberOfClothes.lastIndex) {
if (numberOfClothes[i - 1] == 2) {
numberOfClothes[i]++
numberOfClothes[i - 1]--
}
// 왼쪽 번호 학생부터 검사
} else if (numberOfClothes[i - 1] == 2) {
numberOfClothes[i]++
numberOfClothes[i - 1]--
} else if (numberOfClothes[i + 1] == 2) {
numberOfClothes[i]++
numberOfClothes[i + 1]--
}
}
}
// 여벌의 옷을 가지고 있지만 주지 못하는 경우도 있기 때문에
// 최종적으로 1벌이나 2벌을 가지고 있는 학생들의 수 대입
answer = numberOfClothes.count {
it == 1 || it == 2
}
return answer
}
}
봐주셔서 감사합니다!
질문이나 수정되어야 할 부분이 있다면 댓글로 남겨주세요!
반응형
'알고리즘' 카테고리의 다른 글
[ 알고리즘 / kotlin ] 프로그래머스 lv2 멀쩡한 사각형 (0) | 2020.04.29 |
---|---|
[ 알고리즘 / kotlin ] 최대공약수 구하기 - 유클리드 호제법 (0) | 2020.04.29 |
[ 알고리즘 / kotlin ] 프로그래머스 lv1 모의고사 (0) | 2020.04.07 |
[ 알고리즘 / kotlin ] 백준 2606 Virus (0) | 2020.04.02 |
[ 알고리즘 / kotlin ] 알고리즘 문제에 도움이 되는 코틀린 문법 1 (0) | 2020.02.28 |