Home [ALGORITHM_JOBS] 17. array 3 :star:
Post
Cancel

[ALGORITHM_JOBS] 17. array 3 :star:



Preview Image

문제

N이 주어질 때, 다음과 같은 프로그램을 작성해보자.


입력

첫째 줄에 자연수 N이 주어진다.(1<=N<=100)


출력

예시를 참고하여 작성하자.
예제 입력

1
3

예제 출력

1
2
3
1 2 4
3 5
6 

아이디어

예제처럼 출력하기 위해 리스트 arr을 2차원 배열로 입력 받는다.

표사진
표로 설명을 하면 위에 나와있는 표처럼 결과가 나오기 위해서는 위 순서대로 2차원 리스트에 값을 저장해야 된다.
표에서 나와있는 좌표는 arr좌표 즉 2차원 배열의 좌표이다.
우리가 n에 3을 입력하면 arr : [[1, 2, 4], [3, 5, 0], [6, 0, 0]] 이라는 값을 가질 것이다.

이렇게 arr을 정의하고 이제 반복문을 이용해 arr에 값을 하나씩 넣어야 된다.
n을 입력받으면 행의 수가 n개니깐 처음 for문은 n번째까지 반복해야 된다. ex) n = 3은 표에서 봤듯이 행이 3줄이 나온다.
여기서 중요한 점은 우리가 arr리스트에 넣어야 되는 순서이다.
가시성 있게 좌표로 나타내면 (0,0)=1 / (0,1)=2 (1,0)=3 / (0,2)=4 (1,1)=5 (2,0)=6 순서로 값을 넣어야 된다.
여기서 찾을 수 있는 규칙이 [y][x]라고 할 때 x는 1씩 줄어들고 y는 1씩 증가한다. 표사진

이렇게 값을 넣어야 되니깐 x = i, y = 0로 값을 초기화 해준다.
두번째 for문에서 범위가 i+1인 이유는 위에 표 빗금친 부분을 잘 살펴보면 된다.
첫 번째 빗금에서 보면 값을 1개만 넣으면 되고, 2번 째 빗금은 2개, 3번 째 빗금은 3개….. 이런 규칙으로 값을 넣어야 된다.
따라서 두 번째 반복문은 i+1번을 실행하면 된다.
arr에 cnt 값을 넣고 cnt는 1,2,3,4,5,6….. 이어야 되니깐 cnt += 1을 해준다.
위에서 찾은 규칙을 바탕으로 x -= 1 y -= 1을 해준다.

그리고 2중 for문을 이용해 arr값을 하나씩 출력해주면 된다..


코드

풀이보기(클릭)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
n = int(input())
arr = [[0] * 105 for _ in range(105)]
cnt = 1

for i in range(n): # 입력받은 행의 수
    x = i
    y = 0
    for j in range(i+1):
        arr[y][x] = cnt
        cnt += 1
        x -= 1
        y += 1
        
for i in range(n):
    for j in range(n-i):
        print(arr[i][j], end=" ")
    print()

문제 출처

ALGORITHM JOBS

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