목록으로

Programming Notes

숫자로 쌓아 올리는 탑, 그리고 자아도취에 빠진 숫자들

어린 시절 우리는 숫자를 배우며 덧셈, 뺄셈 놀이를 즐겼습니다. 조금 더 자라면서 숫자는 코딩의 세계에서 데이터의 기본 단위가 되었고, 때로는 알고리즘 문제를 푸는 열쇠가 되기도 합니다. 이번 글에서는 숫자를 생성하고 조작하는 간단한 알고리즘 문제와, 그 안에서 숨겨진...

어린 시절 우리는 숫자를 배우며 덧셈, 뺄셈 놀이를 즐겼습니다. 조금 더 자라면서 숫자는 코딩의 세계에서 데이터의 기본 단위가 되었고, 때로는 알고리즘 문제를 푸는 열쇠가 되기도 합니다. 이번 글에서는 숫자를 생성하고 조작하는 간단한 알고리즘 문제와, 그 안에서 숨겨진 '자아도취 수'라는 흥미로운 개념을 함께 살펴보려 합니다. 마치 탑을 쌓듯 숫자를 만들어가는 과정과, 특별한 조건을 만족하며 스스로에게 도취된 숫자들의 세계로 함께 떠나보시죠.

숫자의 탑 쌓기: 프로그래머스 기출문제 해부

프로그래머스에 등장했던 기출문제 중 하나를 변형하여, 숫자를 특정 패턴에 따라 생성하고 뒤집는 과정을 구현해 보겠습니다. 이 문제는 주어진 숫자 n에 따라 숫자를 쌓아 올리듯 만들어가는 방식으로 해결할 수 있습니다.

핵심은 다음과 같습니다. 먼저 1부터 시작하여 n번째 숫자까지 각 숫자를 이어 붙입니다. 이 때, 각 숫자는 i % 9 + 1 연산을 통해 1부터 9까지 순환하는 값을 가집니다. 생성된 문자열은 reverse() 함수를 통해 뒤집힙니다. 이러한 과정을 n번 반복하면, 마치 탑을 쌓듯 숫자들이 겹겹이 쌓여 최종 결과물을 만들어냅니다.

예를 들어 n이 5라면 다음과 같은 과정을 거칩니다.

  1. 첫 번째 숫자: 1 (뒤집기) -> 1
  2. 두 번째 숫자: 21 (뒤집기) -> 12
  3. 세 번째 숫자: 312 (뒤집기) -> 213
  4. 네 번째 숫자: 4213 (뒤집기) -> 3124
  5. 다섯 번째 숫자: 53124 (뒤집기) -> 42135

이처럼 간단한 알고리즘을 통해 우리는 숫자를 조작하고, 원하는 패턴을 만들어낼 수 있습니다.

자아도취 수: 숫자의 특별한 자기애

이제 조금 더 흥미로운 이야기로 넘어가 볼까요? 바로 '자아도취 수'라는 개념입니다. 자아도취 수란, 각 자릿수를 k번 곱한 값의 합이 자기 자신과 같은 수를 의미합니다. 여기서 k는 숫자의 자릿수를 의미합니다.

예를 들어 153은 자아도취 수입니다. 왜냐하면 153은 세 자리 수이고, 각 자릿수를 3번 곱한 값의 합이 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153 이기 때문입니다. 370, 371, 407 등도 자아도취 수의 예시입니다.

이러한 자아도취 수를 판별하는 알고리즘은 다음과 같이 구현할 수 있습니다.

  1. 숫자를 문자열로 변환합니다.
  2. 문자열의 길이를 k로 설정합니다. (자릿수)
  3. 각 자릿수를 숫자로 변환하여 k번 곱한 값을 모두 더합니다.
  4. 더한 값이 원래 숫자와 같은지 확인합니다.

자아도취 수는 단순히 수학적인 호기심을 자극하는 존재일 뿐만 아니라, 암호학이나 데이터 압축과 같은 분야에서도 활용될 가능성이 있습니다.

숫자로 만들어가는 재미, 그 이상의 의미

이번 글에서는 숫자를 생성하고 조작하는 알고리즘 문제와 함께, '자아도취 수'라는 흥미로운 개념을 살펴보았습니다. 단순해 보이는 숫자도 알고리즘이라는 도구를 통해 다양한 형태로 변형될 수 있으며, 그 안에는 예상치 못한 수학적 아름다움이 숨겨져 있다는 것을 알 수 있었습니다. 코딩은 단순히 기술적인 능력을 넘어, 창의적인 사고와 문제 해결 능력을 키워주는 좋은 도구입니다. 숫자를 통해 만들어가는 재미, 그리고 그 이상의 의미를 발견하는 경험을 통해 더욱 성장하는 개발자가 되기를 바랍니다.