본문 바로가기
알고리즘

[알고리즘 문제] 숫자 피라미드 (Python / 파이썬)

by yewonnie 2022. 5. 24.

문제

N과 시작 숫자 S가 주어지면 숫자 피라미드를 만드는 프로그램을 작성하시오.
예를 들어, N이 5이고 S가 3 이라면, 그 숫자 피라미드는 다음과 같다.

 - 시작 숫자 S는 꼭대기부터 1씩 증가한다.
 - 시작 행의 번호가 1번이라고 했을때, 짝수번째 행은 왼쪽에서 오른쪽으로 1씩 증가하도록 적고, 홀수번째 행은 거꾸로 적는다.
 - 숫자가 만약 10이 될 경우, 1로 바꾸고 다시 증가한다.  

입력

입력의 첫 번째 줄에 N과 시작 숫자 S가 주어진다. ( 1≤N≤100, 1 ≤S≤ 9)

출력

첫 번째 줄부터 숫자 피라미드를 출력한다. (각 줄에 존재하는 공백의 개수와 숫자의 개수를 정확하게 확인해주시바랍니다.)

문제 풀이

숫자 피라미드 문제는 N과 시작 숫자 S가 주어지면 숫자 피라미드를 만드는 문제이다.

시작 숫자 S는 꼭대기부터 1씩 증가하는데, 짝수번째 행은 왼쪽에서 오른쪽으로 증가하고

홀수번째 행은 오른쪽에서 왼쪽으로 증가한다. 

만약 숫자가 10이 될 경우 1로 바꿔야 한다. 

 

이렇게 주어진 조건을 이용하여 문제를 해결하려면,

짝수번째 행과 홀수번째 행을 나누어 생각해보아야 한다.

짝수번째 행은 오른쪽으로 갈수록 수가 증가하므로 첫번째 수를 알면 된다. 

홀수번째 행은 왼쪽으로 갈수록 수가 증가하므로 마지막 수를 알면 된다. 

짝수번째 행의 첫번째 수는 이전 행의 첫번째 수에 1을 더해주면 된다. 

홀수번째 행의 마지막 수는 이전 행의 마지막 수에 1을 더해주면 된다. 

홀수번째 행의 첫번째 수는 구한 마지막 수에 해당 행의 개수만큼 더해 구할 수 있다.

 

이렇게 수한 각 행의 첫번째 수를 이용해 수를 출력하면 숫자 피라미드를 구할 수 있다.

이때, 공백의 개수는 N에서 해당 행의 번째 수를 빼준 값이다.


My Code

n, s = map(int,input().split()) # 피라미드 층, 시작 숫자

for i in range(1, n + 1):
    print(' ' * (n - i), end = '') # n - 층만큼 공백 출력

    if i % 2 == 0:                # 짝수번째 층이라면
        now = previousFirst + 1   # 첫번째 수 = 이전 행의 첫번째 수에 1을 더한 값
        if now == 10: now = 1     # 10이라면 1로 만들어줌
        
        # 구한 첫번째 값부터 1씩 증가시키며 출력
        for j in range(2 * i - 1):
            print(now, end = '')
            previousLast = now # 홀수번째 층에 알려주기 위해 마지막 수 저장
            now += 1
            if now == 10: now = 1 # 10이라면 1로 만들어줌 

    else:                      # 홀수번째 층이라면
        if i == 1: now = s     # 첫번째 층일 땐 시작숫자가 첫번째 수
        else:                  # 그 이후 층이면
            now = previousLast # 이전 층의 마지막 수를 넣어줌
        
        # 첫번째 수를 구하기 위해 1씩 증가시켜줌 
        for j in range(2 * i - 1):
            now += 1
            if now == 10: now = 1 # 10이면 1로 만들어줌 

        previousFirst = now # 짝수번째 층에 알려주기 위해 첫번째 수 저장

        # 구한 첫번째 수부터 1씩 감소시켜가며 출력 
        for j in range(2 * i - 1):
            print(now, end = '')
            now -= 1
            if now == 0: now = 9 # 0이면 9로 바꿔줌 

    print()

댓글