Kotlin 사전캠프 TIL 5일차

노재원·2024년 3월 25일
0

내일배움캠프

목록 보기
5/90

오랜만에 웹 개발 강의 듣기

웹 개발은 고등학교 2학년을 마지막으로 커리큘럼에서는 빠졌던 걸로 기억하는데 사실 내 웹 개발 공부는 1학년이 마지막이었다. 수업에서 뒤쳐졌더니 이후로 도통 이해가 가지 않아서 그랬다.

HTML 태그로 진도를 나갈때 까지는 꽤 할만 했었는데 CSS가 문제였다. Class를 지정하고 Div가 나뉘고 어디선 무슨 속성 Head엔 저거 추가니 뭐니 하며 최대한 혼자 해보려다가 뒤쳐졌더니 Javascript 부터는 너무 어렵게만 느껴져 반쯤 포기한 상태가 됐었다.

지금 생각해보면 주류로 개발하고 공부하던 C, Java와 생김새가 너무나도 달라서 그랬던 것 같다.

그리고 수 년이 지난 지금 다시 CSS까지 강의를 듣고 느낀 점은.. 굉장히 친숙하다는 것이었다.
iOS와 Android에서 수도 없이 해오던 UI 구성은 오랜만에 본 CSS도 단박에 친숙해지게 만들어줬다. 속성으로 style 먹이는게 다 그렇겠지 싶다.

4시간 사이에 블로그 작성, 웹 개발 용어 정리, 알고리즘도 풀어보기, 괜히 책상 배치 바꾸기등 많은 일을 하다보니 강의는 천천히 듣게될 것 같지만 이번엔 고등학생 때와 달리 따라가는 데엔 문제 없을 것 같다.
이 정도로 익숙함이 느껴질 줄이야!


없는 숫자 더하기

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

문제 링크

fun solution(numbers: IntArray): Int {
        var answer = 0
    
        for (i in (1..9)) {
            answer += if (numbers.contains(i)) 0 else i
        }
        
        return answer
    }

문제 자체는 꽤 간단했다. 요지는 없는 수인지 재빠르게 판단하는 방법 같은데 나는 뾰족한 수는 떠오르지 않아서 간단한 반복문으로 제출하게 됐다. 더 찾아보니 역시나 더 간결한 솔루션이 있었다.

fun solution(numbers: IntArray): Int = (0..9).filterNot(numbers::contains).sum()

filterNot 을 통해 꽤 간결하게 작성이 가능했다. 또 하나 배워간다. 다만 반복 횟수에 대해서는 조금 비효율적일 여지가 있을지도 모른다는 생각이 들었지만 요즘 성능에 0.001초 단위로 싸우는 것도 아니고 간결한 Kotlin 코드가 개발자를 더 행복하게 만들 거라 생각이 들었다.

그리고 나서 탭을 끄려는 와중에 정말 최고의 답이 밑에 적혀 있어서 추가로 가져왔다.

fun solution(numbers: IntArray): Int  = 45 - numbers.sum()

마치 완벽한 수수께끼 문제 풀이를 본 것 같아 머리가 띠용했다.
0부터 9까지로 문제에 제한이 걸려 있으니 정말 최고로 효율적인 답이 아닐까 싶다.


핸드폰 번호 가리기

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

문제 링크

fun solution(phone_number: String): String = 
        phone_number.substring(0, phone_number.length - 4)
            .replace(Regex("\\d"), "*") + phone_number.takeLast(4)

이번에는 다른 kotlin 풀이자 분들처럼 kotlin스럽게 작성하고자 찾아보니 단일 표현식 함수라고 부르는 방식으로 제출했다.

벌써부터 정규 표현식을 쓰게될 줄은 몰랐는데 처음에 range로 replace 하면 쉽지 않나? 했다가 바로 아닌걸 생각하고 떠올릴 수 있는 방법이 별로 안돼서 정규표현식을 통한 replace를 채택했다.

여담이지만 정규표현식은 너무 어려워서 참으로 아리송한 부분인데 요즘은 AI가 정규표현식 정도는 무난하게 보조를 해줄테니 다행이라는 생각이 든다.

0개의 댓글