[Algorithm/BOJ] N과M(재귀함수 이용)

2022. 9. 4. 01:20Algorithm

지금까지 재귀함수 문제를 보면서 가장 헷갈렸던 지점은 호출 재귀함수에서 넘겨주는 변수값을 call-by-reference형식으로 생각 했다는 것이다. 그래서 처음 호출된 함수로 돌아왔을 때 변수값이 가장 마지막에 호출된 변수값과 같을 것이라는 착각을 했다. 

 

그러나 각각에 호출된 재귀 함수들을 서로 연결시키는 것이 아닌 각각의 함수라고 생각하고 call-by-value 임으로 변수값이 변하지 않음을 인지해야 한다. 

 

<참고 자료>

https://www.youtube.com/watch?v=OrTozbfUPbI 

1. N과 M(1) 

_ 중복x(수열_순서가 있음) , 오름차순x

https://www.acmicpc.net/problem/15649

 

15649번: N과 M (1)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

위 사진과 같이 각 함수를 다른 함수라고 인지하여 생각해야 한다. 

 

2. N과 M(2)

_중복 x , 오름차순 o

https://www.acmicpc.net/problem/15650

 

15650번: N과 M (2)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

매개 변수로 idx, 즉 i 값을 넘겨주어 오름 차순이 되도록 만든다. 

 

3. N과 M(3)

_ 중복(0), 오름차순(x)

중복이 가능하기  때문에 배열 visited/arr 을 사용하여 사용 가능 여부를 체크해 줄 필요가 없음.

오름차순이 아니어도 됨으로 idx 값으로 넘겨줄 필요가 없음.