알고리즘 공부(C++)

10994 별 찍기 - 19 (파이썬/재귀)

혀니리리 2022. 10. 6. 18:57
728x90

10994번: 별 찍기 - 19 (acmicpc.net)

 

10994번: 별 찍기 - 19

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

이 문제는 계속 도전만 하고 풀지를 못했던 문젠데 다시 트라이해봤다..

def add_star(ptn):
    return "* " + ptn + " *"
def star(n):
    if n == 1:
        return ["*"]
    else:
        return ['*' * (1 + 4 * (n - 1)), '*'+' ' * (4 * (n - 1) - 1)+'*']\
        +list(map(add_star, star(n - 1)))\
        +['*'+' ' * (4 * (n - 1) - 1)+'*', '*' * (1 + 4 * (n - 1))]
print(star(int(input())))
print("\n".join(star(int(input()))))

이건 완전히 내가 풀지는 못했고 공중에 돌아다니는 답을 참고를 많이 했다,,

이 문제의 핵심은 그 전에 갖고있는 리스트의 형태를 그대로 들고 와서 어떤 획을 추가해서 모양을 만들고 그 상태로 새로운 리스트를 만드는 것을 반복해야 했다.

그러다 보니 파이썬에서 리스트를 다루는 것에 대한 정확한 이해가 필요했다.

["*****", "*   *", "* * *", "*   *", "*****"]

이런 형태의 리스트를 "\n".join(lst) 꼴을 이용하여 print 해낼 수 있다거나

map함수에 대한 이해가 필요했는데 

map함수 : 리스트나 튜플 형태의 반복이 가능한 것에 반복적인 함수계산을 해주는 아이이다.

이를 list()로 묶어서 새로운 리스트 형태로 탈바꿈이 가능하고

[] + [] 이런 식으로 리스트에 요소를 추가할 수가 있다.

 

반복해서 하다보면 실력이 늘 것이ㅏㄷ...

728x90