import sys
input = sys.stdin.readline
n = int(input())
k = int(input())
cards = [input().rstrip() for _ in range(n)]
dp = [0] * n
res = set()
curStr = ""
def concat(cards, k, n, count):
print(dp)
print(curStr)
if (count == k):
res.add(curStr)
return
for i in range(n):
if dp[i] == 0:
curStr += cards[i]
dp[i] = 1
concat(cards, k, n , count + 1)
dp[i] = 0
curStr = curStr[:-len(cards[i])]
concat(cards, k, n, 0)
print(len(res))
백준 카드놓기 https://www.acmicpc.net/problem/5568
푼 코드인데, 전역변수인 dp 배열과 이어붙이고 있는 문자 보여주는 curStr 문자열 두개에 대해서
함수내에서 global을 쓰지 않아도 dp배열에는 접근이 가능한데, curStr에는 접근이 불가능함
이 코드 디버깅해보면
def concat(cards, k, n, count):
print(dp)
print(curStr)
여기서 print(dp)까지는 되는데
print(curStr)에서
UnboundLocalError: cannot access local variable 'curStr' where it is not associated with a value
이 에러가 뜸, 둘다 함수 내에서 global 키워드 사용하지 않았는데 하나는 쓸 수 있고 하나는 쓸 수 없는 이유가 뭐임??
concat 함수 내에 있는 curStr 대입하는 코드를 삭제하면 curStr 출력 가능. 함수 내에서 대입은 했는데 global 이 아니니까 지역변수 취급 그런데 저 출력 시점에는 없는 변수라서 오류.