오늘은 코틀린으로 호텔 예약 시스템을 만들면서 겪었던 작은 소동과, '정수 내림차순으로 배치하기' 문제에 대한 삽질 경험을 공유해보려 합니다. 호텔 예약 시스템은 아직 갈 길이 멀지만, 알고리즘 문제를 풀면서 코틀린의 강력한 기능을 다시 한번 실감할 수 있었던 하루였습니다.
삽질과 깨달음 사이
알고리즘 문제 '정수 내림차순으로 배치하기'는 주어진 정수의 각 자릿수를 내림차순으로 정렬하여 새로운 정수를 반환하는 간단한 문제입니다. 처음에는 정렬 알고리즘을 직접 구현해야 하나 고민했지만, 코틀린의 형 변환과 내장 함수를 활용하면 훨씬 간결하게 풀 수 있다는 것을 깨달았습니다.
제 머릿속에 떠오른 첫 번째 해결책은 다음과 같았습니다. 정수를 문자열로 변환하고, 문자열을 리스트로 변환한 다음, 내림차순으로 정렬하고, 다시 문자열로 변환한 후 최종적으로 정수로 변환하는 것이죠. 코틀린의 체이닝 기능을 활용하면 한 줄로 표현할 수 있을 것 같았습니다.
num.toString().toList().sortedDescending().toString().toLong()
하지만 결과는 예상과 달랐습니다. sortedDescending()까지는 의도대로 동작했지만, 리스트를 문자열로 변환하는 과정에서 단순히 리스트의 내용을 문자열 형태로 출력해버리는 문제가 발생했습니다. 예를 들어, [8, 7, 3, 2, 1, 1]과 같은 리스트가 "[8, 7, 3, 2, 1, 1]"이라는 문자열로 변환되는 것이죠.
여기서 중요한 것은 단순히 리스트를 문자열 형태로 출력하는 것이 아니라, 리스트의 각 요소를 연결하여 하나의 문자열로 만들어야 한다는 점이었습니다.
문제를 해결하기 위해 코틀린의 joinToString() 함수를 사용했습니다. 이 함수는 리스트의 모든 요소를 지정된 구분자를 사용하여 연결하여 하나의 문자열로 만들어줍니다.
num.toString().toList().sortedDescending().joinToString("").toLong()
joinToString("")을 사용하면 리스트의 각 숫자를 빈 문자열로 연결하여 "873211"과 같은 원하는 형태의 문자열을 얻을 수 있습니다. 그리고 toLong()을 사용하여 최종적으로 정수로 변환하면 문제 해결 완료!
코틀린, 사랑하지 않을 수 없는 언어
이번 문제를 풀면서 코틀린의 유연함과 강력한 기능에 다시 한번 감탄했습니다. 형 변환, 리스트 조작, 문자열 처리 등 다양한 기능을 간결하고 직관적으로 사용할 수 있다는 점이 코틀린의 가장 큰 장점이라고 생각합니다. 물론, 처음에는 시행착오도 있었지만, 문제를 해결해나가는 과정에서 코틀린에 대한 이해도를 더욱 높일 수 있었습니다. 앞으로도 코틀린을 꾸준히 공부하고 활용하여 더욱 효율적이고 멋진 코드를 작성할 수 있도록 노력해야겠습니다. 호텔 예약 시스템 완성까지 화이팅!