오늘은 코틀린을 활용하여 간단한 계산기를 만들고, 제곱근 판별 알고리즘 문제를 풀어보면서 하루를 마무리했습니다. 특히 알고리즘 문제에서 코틀린의 강력한 형변환 기능 덕분에 간단하게 문제를 해결할 수 있었던 경험이 인상 깊었습니다.
코틀린의 편리한 형변환 기능
오늘 코드 카타에서 문자열을 정수로 변환하는 과정에서 코틀린의 toInt() 함수가 얼마나 편리한지 다시 한번 실감했습니다. 문자열 앞에 "+"나 "-" 기호가 붙어 있어도 별도의 처리 없이 깔끔하게 정수로 변환해주는 덕분에, 복잡한 로직 없이 간단하게 코드를 작성할 수 있었습니다. 예를 들어, "+123"이나 "-456"과 같은 문자열도 toInt() 함수 하나로 쉽게 정수로 변환할 수 있습니다. 다른 언어였다면 별도의 정규 표현식을 사용하거나, 조건문을 통해 부호를 판별해야 했을지도 모릅니다.
제곱근 판별 알고리즘, 두 가지 접근 방식
오늘 풀어본 문제는 주어진 양의 정수 n이 어떤 양의 정수 x의 제곱인지 판별하고, 제곱이라면 x+1의 제곱을 반환하고, 제곱이 아니라면 -1을 반환하는 문제였습니다. 처음에는 단순하게 반복문을 사용하여 1부터 n/2까지 숫자를 하나씩 제곱해 보면서 n과 일치하는지 확인하는 방법을 사용했습니다. 반복 횟수를 줄이기 위해 n/2까지만 탐색했지만, 여전히 시간이 오래 걸리는 케이스가 존재했습니다.
하지만 좀 더 효율적인 방법을 고민한 끝에 제곱근을 활용한 접근 방식을 떠올렸습니다. Math 클래스에 있는 sqrt() 함수를 이용하여 n의 제곱근을 구하고, 이 값이 정수인지 확인하는 것이죠. 제곱근이 정수라면, (x+1)의 제곱을 계산하여 반환하면 되고, 정수가 아니라면 -1을 반환하면 됩니다. 이 방법은 반복문을 사용하는 첫 번째 풀이보다 훨씬 빠르게 결과를 얻을 수 있었습니다.
마무리하며
오늘은 코틀린의 편리한 기능을 활용하여 간단한 문제부터 효율적인 알고리즘까지 다양한 경험을 할 수 있었습니다. 특히 제곱근 판별 문제에서 처음에는 단순한 반복문으로 접근했지만, 수학적 지식을 활용하여 더욱 효율적인 코드를 만들 수 있었던 점이 기억에 남습니다. 앞으로도 다양한 문제에 도전하면서 코틀린과 알고리즘 실력을 꾸준히 향상시켜 나가야겠습니다.