Gaegul's devlog

[Algorithm 풀이] 숫자 피라미드 본문

Algorithm/Algorithm 풀이

[Algorithm 풀이] 숫자 피라미드

부지런깨꾹이 2022. 10. 23. 16:01
728x90
반응형

문제

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

         3
       456
     21987
  3456789
987654321

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

입력

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

출력

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


입력예제

5 3

출력예제

        3
      456
    21987
  3456789
987654321


코드

n, s = map(int, input().split(" "))

# 1) 홀수 : 거꾸로 2) 짝수 : 방향으로 증가
# 첫번쨰 숫자 기억
space = 1 #10
number = 10
previousFirst = 0
previousLast = 0

for i in range(1,n+1): #5층
  #홀수층인지 짝수층인지 알아야함
  for k in range(n,i,-1): #공백 출력
    print(' ',end='')
  #짝수
  if i % 2 == 0 : #증가하면서 출력 #이전의 숫자 +1
    currentFirst = previousFirst + 1
    if currentFirst >= 10:
      currentFirst = 1
      
    for j in range(space):
      print(currentFirst, end='')
      previousLast = currentFirst
      currentFirst += 1
      if currentFirst >= 10:
        currentFirst = 1
        
    print()
  #홀수    
  else: #감소하면서 출력
    if i == 1:
      currentFirst = s

    else:
      currentFirst = previousLast
      for j in range(space):
        currentFirst += 1
        if currentFirst >= 10:
          currentFirst = 1
          
    previousFirst = currentFirst
    
    for j in range(space): # print 해야하는 숫자
      print(currentFirst, end='')
      currentFirst -= 1
      if currentFirst <= 0 :
        currentFirst = 9
        
    print()
  
  space+=2

 

⭐️ SOLUTION

1. 홀수 층, 짝수 층 나눠서 진행 (규칙이 다름으로!!)

2. 숫자가 들어갈 공간 2씩 증가시키면서 각 n개의 층의 숫자 출력 / 공백도 출력 (n에서 i까지 1씩 감소시키면서)

3. 짝수층 - 이전 층의 previousFirst+1가 CurrnentFirst로! 홀수 층은 previousLast +1 를 currentFirst로 가져오기

 

728x90
반응형
Comments