Home [ALGORITHM_JOBS] 15. 숫자 피라미드 :star:
Post
Cancel

[ALGORITHM_JOBS] 15. 숫자 피라미드 :star:



Preview Image

문제

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

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

입력

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


출력

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


아이디어

이 문제는 그렇게 쉽게 풀리지 않았다……
아래는 n = 5, s = 3일 경우 결과값이다.

1
2
3
4
5
    3
   456
  21987
 3456789
987654321

이 문제를 풀기 전에 생각해야 되는 경우가 몇 가지 있다.

  1. 홀수 번 째 줄에 있는 숫자는 감소한다.
  2. 짝수 번 째 줄에 있는 숫자는 증가한다.
  3. 각 줄에 첫 번째 숫자는 어떻게 구해야 될까?
    • 짝수 줄의 첫 번째 숫자는 전 줄 첫 번째 숫자 + 1 이다.
    • 홀수 줄의 첫 번째 숫자는 전 줄 마지막 숫자에서 다음 줄의 숫자 개수만큼 플러스하면 된다.
    • 여기서 중요한 점이 있다. 위의 예시에서 세 번째 줄의 첫 번째 숫자를 구한다고 가정해 보자.
    • 각 줄에서 규칙을 찾으면 각 줄의 숫자 개수는 1, 3, 5, 7……으로 증가하고 있다.
    • 여기서 세 번째 줄의 첫 번째 숫자를 구하면
      6(2번째 줄에 마지막 숫자) + 5(세 번째 줄에 숫자 개수)가 아니다.
      6 에서 1씩 앞으로 가야 된다. 6+1=7, 7+1=8, 8+1=9, 9+1=10이 아니라 1이다. 1+1=2
      따라서 세 번째 줄의 첫 번째 숫자는 1이다.

이 방법들을 생각하면서 천천히 코드를 작성해 봤다.

:star: 이 문제는 어려워서 반복해서 다시 봐야 될 문제이다.


코드

풀이보기(클릭)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
n, s = map(int, input().split())
space = n - 1

num = 1
firstNum = 0
endNum = 0

for i in range(1,n+1): # 숫자 출력 하기 전 공백 출력
    for j in range(space):
        print(' ',end="")
    
    if i % 2 == 0: #짝수 일 경우
        firstNum += 1
        if firstNum == 10:
            firstNum = 1
        for k in range(num):
            print(firstNum ,end="")
            firstNum += 1
            if firstNum == 10:
                firstNum = 1

    else: #홀수 일 경우
        if i == 1: # 첫 번째 줄의 숫자는 무조건 s가 출력 된다.
            print(s, end="")
            firstNum = s
        else:
            endNum = firstNum
            for p in range(num-1):
                if endNum >= 10:
                    endNum = 1
                endNum += 1
                if endNum == 10:
                    endNum = 1

            firstNum = endNum

            for z in range(num):
                print(endNum,end="")
                endNum -= 1
                if endNum == 0:
                    endNum = 9
    num += 2
    space -= 1
    print()

문제 출처

ALGORITHM JOBS

This post is licensed under CC BY 4.0 by the author.
Trending Tags