내일배움캠프로는 2주차, Kotlin을 정식으로 배우는 건 1주차에 들어섰다.
대충 어떻게 될지 얘기는 듣긴 했지만 안건과 과제를 보고 이번 주차는 어찌됐든 저번 주보다는 편하게 가져갈 수 있겠다는 생각을 했다.
조는 다행스럽게도 사전캠프때도 웹 용어 발표때 함께했던 분들과 함께 하게돼서 왠지 모를 어색함을 타파할 아이스브레이킹이 굉장히 수월했고 오히려 말이 많아서 진행이 늦어질 수 있겠다는 우려가 될 정도로 금방 가까워져서 기분 좋은 시작이 됐다.
새로운 조에서 만난 분들은 매니저님피셜 잘하는 사람을 모았다
라고 하셨던 지난 주와는 다르게 비전공자지만 열정이 넘치시는 분들이 계셨다.
스크럼이나 회고가 익숙치 않으셔도 적극적이시고 팀 노션 작성과 강의 지급에도 즐거움을 느끼실 정도지만 지금 Kotlin 문법을 배우며 부딪히시기엔 지난 주에 쌓인 피로도 있을테고 이해에 어려움이 있으실 수도 있으니 매너지님이 의도하신 조 편성일지는 모르지만 나도 열심히 해서 많은걸 공유해드리고 얻어가시는게 많으실 수 있게 하기로 했다.
VSCode에서 벗어나 새 친구인 IntelliJ를 다운받고 쓸만한 기능을 알려드리고 유용한 단축키를 알려드리는 것부터 시작해서 공부와 질문이 부담스럽지 않은 분위기를 만들고자 저번 주보다 꼰대스러운 얘기는 조금 더 많았지만 개발이 너무 벽처럼 느껴질 것 같은 느낌보단 이번 주의 분위기가 가볍고 즐거워졌으면 싶은 마음이 크다.
아직은 나도 지급받은 강의를 들으며 강의에서 들은 내용을 응용하는 코드를 좀 더 적어보고 있지만 갑자기 응용을 배우는 것보다 개인별로 진척도를 어느정도 맞출 수 있는 과제가 있으니 과제를 최대한 다방면으로 씹고 뜯고 맛볼 수 있으면 좋을 것 같다.
오늘은 팀 분위기 조성에 더 많은 시간을 썼고 아직 1일차밖에 안됐지만 지난 주보다 나도 부담이 덜하고 다른 분들도 이번 주가 더 편하다고 느껴주셔서 다행인 것 같다.
숫자로 이루어진 문자열 t
와 p
가 주어질 때, t
에서 p
와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p
가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t
="3141592"이고 p
="271" 인 경우, t
의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
fun solution(t: String, p: String): Int = p.length.let {
(0..t.length - it).fold(0) { acc, index ->
if (t.substring(index, index + it).toLong() <= p.toLong()) {
acc + 1
} else { acc }
}
}
지난 주에 정신없다고 아마 5일만에 풀어보는 코드카타인데 다행히 감을 잃은 건 아닌지 비교적 쉽게 접근해서 풀 수 있었다.
이번에도 이 악물고 단일표현식으로 제출한다고 조금 읽기 어려울 뻔 했지만 fold를 잘 써서 연산을 최소화해서 제출할 수 있었다.
하지만 사실 실수가 몇 개 있었다.
t.chunked
로 문장을 일정 길이마다 자르기.chunked
로 테스트 케이스 돌려보고 나서야 부분문자열 의 의미를 이해해서 도로 돌아가서 범위 날먹을 포기했다..toInt()
사용하고 Int 최대 범위 또 넘기기p
의 길이 ≤ 18 ] 이기 때문에 21억쯤은 우습게 넘길 수 있어서 뒤늦게서야 Long을 비교하기 시작했다. 이걸 눈치채는 것도 늦었는데 그럴 리가 없지만 혹시나 해서 .toInt()
에서 Null이 발생해서 런타임 에러가 뜨는 줄 알아서 .toIntOrNull
에 옵셔널 처리를 하고 자빠졌었다.어쨌든 기분 좋게 성공했고 코드와 퍼포먼스도 만족해서 다른 답안을 보다가 빨간 약을 마시고 말았다.
if (t.substring(index, index + it) <= p) {
acc + 1
} else { acc }
Kotlin은 숫자로 이루어진 문자열끼리 비교할 때 명시적인 캐스팅 없이 비교가 잘 된다.
캐스팅을 제거하고 퍼포먼스도 유의미하게 개선됐다.
안드로이드 앱 개발 당시에도 숫자 문자열 비교는 캐스팅했던 것 같은데 이걸 놓치고 있었다니 좀 허탈했다.