Code Signal -Arcade Kotlin
코드시그널 아케이드 코틀린 풀이
코드시그널 아케이드 Intro 자바 풀이가 끝나고 코틀린 풀이를 올리게 되었습니다.
질문과 틀린부분은 댓글로 남겨주세요. 🎅
글을 참고 하셨다면, 공감, 하트 한번 눌러주시고 가주시면 감사하겠습니다. 🧡💚💘
주어진 배열에서 오름차순으로 나열했을때 사이사이 비어있는 숫자의 갯수를 구하여라.
1, 2, 3, 5, 8 이라면 사이에 4, 6, 7이 필요하다. 즉 3개의 수가 빠진 상태.
최대값 8 최소값 1 을 빼면 7이다. 여기서 총 있는 수의 길이 5를 빼면 2 이다.
그리고 여기에 1을 더해주면 된다.
풀이.
//코틀린
fun makeArrayConsecutive2(statues: MutableList<Int>): Int {
var miss :Int = 0
statues.sort()
for(i in 0 until statues.size-1){
miss += statues[i+1] - statues[i] -1
}
return miss
}
내 방법은 일단 정렬을 해줘야 한다고 생각했다. 그리고 반복문을 통해 일일히 값이 빠진 것을 구하였다.
순차적으로 요소를 뺐을 때 1이 아니라면 연속된 수가 아니기 때문에 그렇게 방법을 만들었다...
fun makeArrayConsecutive2(statues: MutableList<Int>): Int {
return statues.max()!! - statues.min()!! - statues.size + 1;
}
전혀 그럴 필요가 없다. 수학적으로 보려 해야한다. 어디서 부터 어디까지의 사이값, 사이의 무언가를 찾으려면
최대와 최소값을 구하고 그 사이에 어떠한 값을 빼면 앞뒤가 맞는지 알아보는게 더 좋다.
코틀린은 !!으로 널값을 방지하고 max(), min()함수를 통해 간단하게 최대값을 가져올 수 있다.
거기다가 배열의 사이즈를 빼준다면 주어진 답보다 1이 작게 나온다.
여기서 좌절하지말고 규칙을 찾기 위해 다른 케이스도 적용해봐야 한다.
이렇게 하다보면 1이 부족하다는 것이 보이기 때문에 +1 을 해주면 된다.
//자바
int makeArrayConsecutive2(int[] a) {
Arrays.sort(a);
int n = a[a.length-1] - a[0];
return n - a.length + 1;
}
자바의 공식도 똑같다. 표현만 약간 다를 뿐이고, 개념은 똑같다.
728x90
반응형
'Algorithm > Kotlin' 카테고리의 다른 글
#07_CS Arcade Kotlin >> Almost Increasing Sequence (0) | 2020.12.30 |
---|---|
#04_CS Arcade Kotlin >> Adjacent Elements Product (0) | 2020.12.23 |
#03_CS Arcade Kotlin >> Check Palindrome (0) | 2020.12.22 |