합이 같은 부분집합(DFS : 아마존 인터뷰)
2021. 10. 28. 11:53
⏰ 코딩테스트/BFS, DFS
합이 같은 부분집합(DFS : 아마존 인터뷰) N개의 원소로 구성된 자연수 집합이 주어지면, 이 집합을 두 개의 부분집합으로 나누었을 때 두 부분집합의 원소의 합이 서로 같은 경우가 존재하면 “YES"를 출력하고, 그렇지 않으면 ”NO"를 출력하는 프로그램을 작성하세요. 둘로 나뉘는 두 부분집합은 서로소 집합이며, 두 부분집합을 합하면 입력으로 주어진 원래의 집합이 되어 합니다. 예를 들어 {1, 3, 5, 6, 7, 10}이 입력되면 {1, 3, 5, 7} = {6, 10} 으로 두 부분집합의 합이 16으로 같은 경우가 존재하는 것을 알 수 있습니다. ▣ 입력설명 첫 번째 줄에 자연수 N(1
부분집합 구하기(DFS)
2021. 10. 28. 10:40
⏰ 코딩테스트/BFS, DFS
부분집합 구하기(DFS) 자연수 N이 주어지면 1부터 N까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램을 작성하세요. ▣ 입력설명 첫 번째 줄에 자연수 N(1
이진트리 순회(깊이우선탐색)
2021. 10. 27. 10:28
⏰ 코딩테스트/BFS, DFS
이진트리 순회(깊이우선탐색) 아래 그림과 같은 이진트리를 전위순회와 후위순회를 연습해보세요. 전위순회 출력 : 1 2 4 5 3 6 7 중위순회 출력 : 4 2 5 1 6 3 7 후위순회 출력 : 4 5 2 6 7 3 1 전위 순회 def DFS(v): if v>7: return else: print(v) # 본래 함수의 일을 먼저 한다. 전위순회 DFS(v*2) DFS(v*2+1) if __name__=="__main__": n = int(input()) DFS(n) 중위 순회 def DFS(v): if v>7: return else: DFS(v*2) print(v) # 본래 함수의 일을 중간에 한다. 중위순회 DFS(v*2+1) if __name__=="__main__": n = int(input()..
재귀함수를 이용한 이진수 출력
2021. 10. 27. 09:35
⏰ 코딩테스트/BFS, DFS
재귀함수를 이용한 이진수 출력 10진수 N이 입력되면 2진수로 변환하여 출력하는 프로그램을 작성하세요. 단 재귀함수를 이용해서 출력해야 합니다. ▣ 입력설명 첫 번째 줄에 10진수 N(1
재귀함수와 스택 작동 원리
2021. 10. 26. 09:59
⏰ 코딩테스트/BFS, DFS
재귀 함수는 3중, 4중 for문 써야할 때 쓰면 좋다. def DFS(x): if x > 0: DFS(x-1) print(x) if __name__=="__main__": n = int(input()) DFS(n) 3을 입력하면 출력은 1, 2, 3 순으로 출력된다. 왜그럴까? 왜냐하면 재귀함수는 스택으로 작동하기 때문이다. DFS(3) 을 하면 매개변수 x = 3 지역변수 복귀주소 이 세개가 스택에 쌓인다. □ □ □ x=0, DFS(1) 복귀주소 □ □ x=1, DFS(2) 복귀주소 □ □ x=2, DFS(3) 복귀주소 □ □ x=3, 지역변수,복귀주소 □ □□□□□□□□□□□□□ 하나의 묶음을 스택 프레임이라고도 한다. 스택 프레임을 하나씩 처리하고 복귀하면서 끝이 나게 된다. 그렇기 때문에 1,..