챕터가 바뀌며 조가 재편성되었다. 새로운 조원들과는 아직 별로 대화를 해보지 못했지만 일단 다들 낯을 가리는 편으로 보인다. 다들 비전공인지라 조장을 맡게 되었다. 열심히 해야겠다.
저번주차까지는 코틀린 문법에 대한 내용이었다면 이제부터는 앱개발 과정으로 들어간다. 3주 사이클로 입문, 숙련, 심화 과정을 거쳐 최종프로젝트로 이어진다. 아직 먼 얘기라고 생각했는데 벌써 최종프로젝트라는 얘기가 나오니 문득 코앞이라고 느껴진다. 열심히 해야겠다.
오늘은 조가 바뀌고 어수선한 기분이라 집중이 제대로 안되었던 것 같다. 어서 조와 조원들에게 익숙해지고 페이스를 되찾아야겠다.
https://school.programmers.co.kr/learn/courses/30/lessons/12935
배열에서 가장 작은 수를 제거한다. 비어있다면 -1을 채워 반환.
처음엔 정렬할 생각이 들었는데 순서는 바뀌면 안되어서 그냥 정직하게 탐색하기로 했다.
- 풀이 1
fun solution(arr: IntArray): IntArray {
var mn = 0x7fffffff
var id = 0
for (i in 0 until arr.size) {
if (arr[i] < mn) {
mn = arr[i]
id = i
}
}
return arr.sliceArray(0 until id) + arr.sliceArray(id + 1 until arr.size)
}
제거한 원소 앞뒤로 배열을 슬라이싱해서 합쳐줬다.
(비어있으면 -1 채우는 부분을 안해서 틀림)
- 풀이 2
fun solution(arr: IntArray): IntArray {
var mn = 0x7fffffff
var id = 0
for (i in 0 until arr.size) {
if (arr[i] < mn) {
mn = arr[i]
id = i
}
}
val answer = arr.copyOfRange(0, id) + arr.copyOfRange(id + 1, arr.size)
if (answer.size == 0) return IntArray(1) { -1 }
return answer
}
sliceArray는 내부적으로 copyOfRange를 호출하는 것을 보고 이를 직접 호출함.
- 풀이 3
fun solution(arr: IntArray): IntArray {
if (arr.size == 1) return intArrayOf(-1)
var mn = 0x7fffffff
var mnid = 0
arr.forEachIndexed { i, v ->
if (v < mn) {
mn = v; mnid = i
}
}
return arr.copyOfRange(0, mnid) + arr.copyOfRange(mnid + 1, arr.size) }
forEachIndexed로 인덱스와 값을 함께 받아옴.
비어있는지 확인하는 대신 처음에 사이즈 1이면 바로 반환.
- 풀이 4
fun solution(arr: IntArray): IntArray =
if (arr.size == 1) intArrayOf(-1) else run {
var mn = 0x7fffffff; var mnid = 0
arr.forEachIndexed { i, v -> if (v < mn) { mn = v; mnid = i } }
arr.copyOfRange(0, mnid) + arr.copyOfRange(mnid + 1, arr.size) }
run블록 적용, 표현식 함수.