240422 Kotlin 강의 1주차 - 미니튜터 적응하기

노재원·2024년 4월 22일
0

내일배움캠프

목록 보기
23/90
post-custom-banner

내일배움캠프로는 2주차, Kotlin을 정식으로 배우는 건 1주차에 들어섰다.

대충 어떻게 될지 얘기는 듣긴 했지만 안건과 과제를 보고 이번 주차는 어찌됐든 저번 주보다는 편하게 가져갈 수 있겠다는 생각을 했다.

조는 다행스럽게도 사전캠프때도 웹 용어 발표때 함께했던 분들과 함께 하게돼서 왠지 모를 어색함을 타파할 아이스브레이킹이 굉장히 수월했고 오히려 말이 많아서 진행이 늦어질 수 있겠다는 우려가 될 정도로 금방 가까워져서 기분 좋은 시작이 됐다.


미니튜터(자칭) 해보기

새로운 조에서 만난 분들은 매니저님피셜 잘하는 사람을 모았다 라고 하셨던 지난 주와는 다르게 비전공자지만 열정이 넘치시는 분들이 계셨다.

스크럼이나 회고가 익숙치 않으셔도 적극적이시고 팀 노션 작성과 강의 지급에도 즐거움을 느끼실 정도지만 지금 Kotlin 문법을 배우며 부딪히시기엔 지난 주에 쌓인 피로도 있을테고 이해에 어려움이 있으실 수도 있으니 매너지님이 의도하신 조 편성일지는 모르지만 나도 열심히 해서 많은걸 공유해드리고 얻어가시는게 많으실 수 있게 하기로 했다.

VSCode에서 벗어나 새 친구인 IntelliJ를 다운받고 쓸만한 기능을 알려드리고 유용한 단축키를 알려드리는 것부터 시작해서 공부와 질문이 부담스럽지 않은 분위기를 만들고자 저번 주보다 꼰대스러운 얘기는 조금 더 많았지만 개발이 너무 벽처럼 느껴질 것 같은 느낌보단 이번 주의 분위기가 가볍고 즐거워졌으면 싶은 마음이 크다.

아직은 나도 지급받은 강의를 들으며 강의에서 들은 내용을 응용하는 코드를 좀 더 적어보고 있지만 갑자기 응용을 배우는 것보다 개인별로 진척도를 어느정도 맞출 수 있는 과제가 있으니 과제를 최대한 다방면으로 씹고 뜯고 맛볼 수 있으면 좋을 것 같다.

오늘은 팀 분위기 조성에 더 많은 시간을 썼고 아직 1일차밖에 안됐지만 지난 주보다 나도 부담이 덜하고 다른 분들도 이번 주가 더 편하다고 느껴주셔서 다행인 것 같다.


코드카타 - 프로그래머스 크기가 작은 부분문자열

숫자로 이루어진 문자열 tp가 주어질 때, 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를 잘 써서 연산을 최소화해서 제출할 수 있었다.

하지만 사실 실수가 몇 개 있었다.

  1. t.chunked 로 문장을 일정 길이마다 자르기
    .chunked로 테스트 케이스 돌려보고 나서야 부분문자열 의 의미를 이해해서 도로 돌아가서 범위 날먹을 포기했다.
  2. .toInt() 사용하고 Int 최대 범위 또 넘기기
    이건 죽어도 안고쳐지는 고질병인가 싶다. [ 1 ≤ p의 길이 ≤ 18 ] 이기 때문에 21억쯤은 우습게 넘길 수 있어서 뒤늦게서야 Long을 비교하기 시작했다. 이걸 눈치채는 것도 늦었는데 그럴 리가 없지만 혹시나 해서 .toInt() 에서 Null이 발생해서 런타임 에러가 뜨는 줄 알아서 .toIntOrNull에 옵셔널 처리를 하고 자빠졌었다.

어쨌든 기분 좋게 성공했고 코드와 퍼포먼스도 만족해서 다른 답안을 보다가 빨간 약을 마시고 말았다.

if (t.substring(index, index + it) <= p) {
                acc + 1 
            } else { acc }

Kotlin은 숫자로 이루어진 문자열끼리 비교할 때 명시적인 캐스팅 없이 비교가 잘 된다.
캐스팅을 제거하고 퍼포먼스도 유의미하게 개선됐다.

안드로이드 앱 개발 당시에도 숫자 문자열 비교는 캐스팅했던 것 같은데 이걸 놓치고 있었다니 좀 허탈했다.

post-custom-banner

0개의 댓글