파이썬 초보 : 숫자피라미드 문제.

조회수 2729회

이미지

n = int(input())
a=list(range(0,10))

for i in range(1,n+1):
    for j in range(i):
        print(a[j]+i, end='')
    print()

2를 넣었을때는 잘 작동되는데 3부터넣으면 456이 아니라 345가 나와요.

3 답변

  • 2를 넣었을 때 잘 작동되는 것처럼 보이는 것은 우연입니다. 필연적으로 정상 작동한 게 아니라는 뜻입니다.

    n = 3일 때 코드는 다음 순서대로 동작합니다.

    1. 1부터 4까지 순회해야 하므로 i = 1로 잡고 다음으로 진행
    2. 1부터 1까지 순회해야 하므로 j = 1로 잡고 다음으로 진행
    3. a[1] + 1 프린트
    4. 1부터 1까지 순회가 끝났으므로 줄바꿈을 프린트
    5. i = 2로 잡고 다음으로 진행
    6. 1부터 2까지 순회해야 하므로 j = 1로 잡고 다음으로 진행
    7. a[1] + 2 프린트
    8. a[2] + 2 프린트 ------> 여기서 3 출력됨
    9. 1부터 2까지 순회가 끝났으므로 줄바꿈을 프린트
    10. i = 3으로 잡고 다음으로 진행
    11. 1부터 3까지 순회해야 하므로 j = 1로 잡고 다음으로 진행
    12. a[1] + 3 프린트 ------> 여기서도 3 출력됨 ------> 어??
    13. a[2] + 3 프린트 ------> 여기서는 4 출력됨 ------> 어 이거 왜이래???
    14. a[3] + 3 프린트 ------> 여기서는 5 출력됨 ------> 앗!! 뭔가 이상한데 !!!
    15. 이하 생략

    진짜 문제는 어떤 때에 이중 for문 안의 출력 결과값이 같아질 수 있다는 것입니다.
    a[2] + 2 = a[1] + 3 이어서 문제가 생긴다는 뜻이지요.


    저라면 그냥 이렇게 하겠어요. 문제의 요건만 보면 목록까지 정의해서 쓸 일은 아닙니다.

    n = 4
    
    last_print = 0 # 헉 내가 마지막으로 출력한 숫자가 뭐였징 ???
    
    for i in range(n) : # n 이 4 니깐 총 4층을 쌓아야겠구나
        for j in range(i+1) : # 1층에선 1개만, 2층에선 2개만 출력해야겠구나
            last_print = last_print + 1 # 헉 근데 이번에 출력할 숫자는 마지막에 출력한 숫자보다 1이 커야 해
            print(last_print, end = '') # 그걸 출력을 해볼까?
        print() # 이번 층은 다했으니깐 다음 층 넘어가볼까?
    
    # 헉 다 됐넹
    
  • num = 20
    
    asdf = 1
    
    for i in range(num):
        qrweqr = ''
    
        for j in range(i + 1):
            qrweqr += str(j + asdf) + '.'
    
        print(qrweqr)
    
        asdf += i + 1
    
    """
    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.45.
    46.47.48.49.50.51.52.53.54.55.
    56.57.58.59.60.61.62.63.64.65.66.
    67.68.69.70.71.72.73.74.75.76.77.78.
    79.80.81.82.83.84.85.86.87.88.89.90.91.
    92.93.94.95.96.97.98.99.100.101.102.103.104.105.
    106.107.108.109.110.111.112.113.114.115.116.117.118.119.120.
    121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.
    137.138.139.140.141.142.143.144.145.146.147.148.149.150.151.152.153.
    154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.
    172.173.174.175.176.177.178.179.180.181.182.183.184.185.186.187.188.189.190.
    191.192.193.194.195.196.197.198.199.200.201.202.203.204.205.206.207.208.209.210.
    """
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)