반응형

재귀 3

[BOJ][15651번] N과 M (3) (백트래킹)

안녕하세요 Dibrary입니다. 이번에 정리할 문제는 백트래킹을 사용해서 풀어야 하는? (백트래킹을 쓰기 좋은) 문제입니다. 개인적으로 백트래킹을 좀 어려워해서 정리해두고자 합니다. 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 이 문제를 보자마자 처음 든 생각은 '사용한 숫자를 또 쓸 수 있다니' 였습니다. 즉, 사용한 숫자와 사용하지 않은 숫자의 구별을 할 필요가 없는 셈이죠. 이 문제를 풀 때 중요한 것은 '길이를 맞추는 것'과 '만들 수 있는 모든 경우'를 구해야 하는 것이죠. 길이 맞추는거야 갯수 ..

[Scala] 재귀함수

안녕하세요 Dibrary입니다. 어떤 언어든 함수 기능은 다 가지고 있습니다. 그럼에도 스칼라의 함수가 좀 더 특별하게 느껴지는 이유는 스칼라로 순수함수를 구성하면 굉장히 유용하기 때문일거 같네요. 순수함수가 가지는 특징은 아래와 같습니다. 입력 매개변수만을 가지고 계산을 수행한다. 동일 입력에 대해 항상 같은 값을 반환한다. 함수 외부의 어떤 데이터에 영향을 주거나 / 받지 않는다. 이런 특징 덕분에 스칼라는 함수형 프로그래밍에 적합한 언어입니다. 특히 부수효과를 발생시키지 않을 수 있다는 점이 매력적이죠. 간단하게 곱셈을 하는 함수를 정의해보았습니다. 33*44의 결과를 내보냅니다. 함수 정의할 때 중요한 점은 자료형을 명시해주어야 한다는 겁니다. 명시하지 않으면 아래와 같이 에러를 볼 수 있습니다...

[BOJ][5639번] - 이진 검색 트리 (순회 바꾸기)

안녕하세요 Dibrary입니다. 이번에는 이진검색트리에서 '전위순회'한 값 순서가 주어질 때, 이 값을 '후위순회'한 값 순서로 바꾸는 문제입니다. 재귀를 떠올리지 못해서 도대체 어떻게 해야 하나 아주 알머리를 고민했던 문제입니다... 문제는 아래와 같습니다. 제일 먼저 든 생각은 '전위 순회는 어떻게 하는 거였더라~?' 입니다. 전위순회는 루트 먼저 가고 좌, 우 를 방문합니다. 이게 무슨말일까요? 위 문제에서 주어진 예시를 통해 확인해보겠습니다. 먼저 이렇게 3개만 놓고 볼 때, 루트는 50이고, 왼쪽을 먼저 간다고 했으니 30을 방문하겠네요. 다음으로 30을 루트로 놓고 볼 때, 왼쪽 24를 먼저 방문하겠네요. 24를 루트로 놓고 볼 때, 5를 방문하고, 5는 더이상 자식노드가 없죠. 그럴 때 오른..

반응형