Gaegul's devlog
[Algorithm 풀이] 숫자 피라미드 본문
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
반응형
'Algorithm > Algorithm 풀이' 카테고리의 다른 글
[Algorithm 풀이] 카드놀이 (0) | 2022.10.26 |
---|---|
[Algorithm 풀이] NN단표 (0) | 2022.10.26 |
[Algorithm 풀이] 이진 탐색 : 나무 자르기 (1) | 2022.10.06 |
[Algorithm 풀이] 이진 탐색 (1) | 2022.10.05 |
[Algorithm 풀이] 재귀 함수 : division (0) | 2022.10.04 |
Comments