[백준] 2448: 별 찍기 - 10 - python[파이썬]

다인·2024년 10월 22일

백준

목록 보기
86/112
post-thumbnail

코드

import sys
input = sys.stdin.readline

def star(n):
    if n==3:
        init = ['***', '* *', '***']
        return init
    else:
        prev = star(n//3)
        lst = []
        for i in prev:
            lst.append(i*3)
        for i in prev:
            lst.append(i + ' '*(n//3) + i)
        for i in prev:
            lst.append(i*3)
        return lst
    
N = int(input())
print('\n'.join(star(N)))
  • 처음에 이렇게 리스트 각 줄을 순회하는 게 아니라 그냥 star(1)*3 이런 식으로 했더니 커서(?)의 위치가 바뀌기 때문에 이상하게 출력되었다.
  • 그래서 아이디어가 안 떠올라.. 구글링해서 대부분 이렇게 리스트에 저장한다는 것을 알게 되어 코드를 작성했다.
  • 물론 마지막 print구문은 아래와 같이 써도 되겠다.
res = star(N)
print(*res, sep='\n')

틀린 코드

그런데 나는 코드를 작성하며 n에 3, 9, 27..을 넣지 않고 1, 2, 3..을 넣고 싶어서 k = int(math.log(N, 3))을 작성하고 star(k)를 불러서 출력하도록 했는데 틀렸습니다가 나오더라... 아무리 봐도 위 코드랑 같아 보이고.. gpt는 엉뚱한 소리만 하고.... claude은 똑같은 로직이라고 하구... 분명 N은 3의 거듭제곱만 들어온댔는데 다른 입력이 있는 걸까...? 혹시라도 차이점을 발견하시는 분은 꼬옥 알려주세요.. 답답해 죽겠어요..

import sys, math
input = sys.stdin.readline

def star(n):
    if n==1:
        init = ['***', '* *', '***']
        return init
    else:
        prev = star(n-1)
        lst = []
        for i in prev:
            lst.append(i*3)
        for i in prev:
            lst.append(i + ' '*(3**(n-1)) + i)
        for i in prev:
            lst.append(i*3)
        return lst
    
N = int(input())
k = int(math.log(N, 3))
res = star(k)
print('\n'.join(res))

결과

0개의 댓글