문제 소개
숫자 n이 주어졌을 때, n개의 행으로 이루어진 삼각형을 출력하는 프로그램을 작성해 보겠습니다. 이때 각 행에는 해당 행의 번호 i가 i번 반복되어 나타나야 합니다.
예를 들어 입력값이 n = 5라면 출력 결과는 다음과 같습니다.
1 22 333 4444 55555
해결 접근 방법
이 문제는 수학적 성질을 활용하면 매우 간단하게 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.
- 1부터 n까지 반복합니다.
- 각 반복에서 (10^i) // 9 × i 값을 계산하여 출력합니다. 여기서 10^i를 9로 나눈 몫은 1, 11, 111, 1111처럼 1이 i개 이어진 숫자가 되고, 여기에 i를 곱하면 원하는 패턴이 완성됩니다.
- 각 줄을 출력한 후 다음 줄로 넘어갑니다.
구현 예제
아래의 Python 코드를 통해 실제 구현 방법을 확인할 수 있습니다.
def solve(n):
for i in range(1, n+1):
print((10**i)//9*i)
n = 8
solve(n)입력
8
출력
1 22 333 4444 55555 666666 7777777 88888888
코드 설명
solve(n) 함수는 1부터 n까지 반복하면서 각 행에 출력할 숫자를 계산합니다. 예를 들어 i = 3일 때, 10³ = 1000이고 1000 // 9 = 111입니다. 여기에 3을 곱하면 333이 되어 세 번째 행에 '333'이 출력됩니다. 이러한 방식으로 반복문만 사용해 복잡한 중첩 루프 없이도 깔끔하게 숫자 삼각형을 만들 수 있습니다.
이 기법은 시간 복잡도가 O(n)으로 매우 효율적이며, 문자열 연산 없이 정수 연산만으로 패턴을 생성한다는 점에서 흥미로운 최적화 사례로 자주 소개됩니다.