성장기록지

백준) 2529 부등호 문제 풀이 중 어려웠던 점 회고 본문

알고리즘/dfs,bfs

백준) 2529 부등호 문제 풀이 중 어려웠던 점 회고

pengcon 2024. 3. 13. 17:44

이 문제는 간단한 백트래킹으로 해결할 수 있는 문제인데.

1시간 반 동안 뚫어져라 쳐다보다 자력으로 해결  못하고 해설을 조금 참고하여서 풀고말았다.

 

왜 어려웠는지 미래의 나를 위해 작성하겠다.

 

전체 코드

 

visited=[]
ans=[]
n=int(input())
sign_list=list(map(str, input().split()))

def check(left, right, sign):
    if sign == '<':
        return left < right
    else:
        return left > right
    
def back(count,temp):
    if count==n+1:
        a=""
        for i in temp:
            a=a+str(i)
        ans.append(a)
        # ans.append(temp.copy())
        return
    
    
    for i in range(10):
        if i not in visited:
            if count == 0 or check(temp[-1],i,sign_list[count-1]):
                visited.append(i)
                temp.append(i)
                back(count+1,temp)
                visited.pop()
                temp.pop()

back(0,[])

print(ans[-1])
print(ans[0])

 

 

해멨던 점

1.백트래킹에 대한 이해부족

검색하면 넘치도록 나오는 기본 백트래킹 포멧에 대해 이해가 부족하였다.

흐름을 이해 못하여서 부등호를 체크하는 것을 어디다 넣을지 많이 해메고 말았다.

처음에 check 함수로 따로 만들어준다는 것도 생각 못하였다.. 

 

2.리스트에 대한 이해부족

ans에 append 하는 값을 처음에 ans.append(temp)로 작성하였다.

그런데 답이 안나와서 디버그 해보니 똑같은 값으로 무쟈게 복사가 되는것이였다.

이유를 살펴봤는데 리스트에 대한 특성 때문이였다.

temp도 리스트이고,temp를 append하더라도 temp의 값이 바뀌면 append한 값들도 다 같이 변한다는 것을 모르고있었다.

(골드어캐찍었냐)

https://black-hair.tistory.com/49

 

[기능] 파이썬 리스트 복사 (python copy)

Copy 파이썬에서 일반적으로 복사할 때 아래와 같은 형식으로 진행된다. list_A = ["ABC","DEF"] list_B = list_A 하지만 이렇게 복사를 하는 경우 단순한 값에 대해서는 문제가 없지만, 리스트를 복사할 때

black-hair.tistory.com

이 블로그 글을 정독하여 학습하였다... 

리스트의 변수명은 주소를 가리키는 값이라는 것을 명심해야겠다.

'알고리즘 > dfs,bfs' 카테고리의 다른 글

백준 13023) ABCDE (python)  (0) 2024.12.28
백준 2668) 숫자고르기 (python)  (0) 2024.12.22
백준)17281 ⚾ 풀이  (1) 2024.04.01
스터디) 백준 16509:장군 Python 상세 풀이  (2) 2024.03.07