본문 바로가기

재귀함수2

[백준 11729/c++] 하노이의 탑 이동 순서 재귀문제의 가장 유명한 하노이의 탑 문제이다 하노이의 탑 문제의 핵심은 가장 아래의 원판부터 하나씩 옮겨서 이동해야 한다는 점이다 1. 그러기 위해서는 원판의 총 개수 n 개에서 가장 아래 하나를 뺀 n-1개를 임시위치에 모두 옮겨야 한다 2. 원래 위치에서 가장 아래에 있는 원판을 목표 위치로 이동시킨다 3. 임시 위치에 쌓인 n-1개의 원판을 목표 위치로 이동시킨다 4. 이걸 원판 수 n만큼 반복한다 즉, 위의 알고리즘을 가진다 이동을 출력으로 보여줘야 하므로 원판수 n외에도 원래위치, 임시위치, 목표위치 를 인자로 갖는 함수를 만든다 void hanoi(int n인자개수, string from원래위치, string to목표위치, string res임시위치){ // 순서는 정하기 나름 hanoi(n-.. 2022. 7. 3.
백준 1629/c++ )) 곱셈 - divde and conquer, 재귀함수 그대로 주는대로 계산하면 연산시간이 너무 길어서 시간 초과하는 문제이다 재귀 함수로 분할정복 divde and conquer를 사용하여 연산 수를 줄이고, 각 입력의 최대값이 int 의 최대치 값 이므로 long long 을 사용하여 결과값의 오버플로우를 1차로 막는다 분할한 값을 합칠때 큰 수끼리의 곱셈을 해야하므로 long long 뿐 아니라 %c 로 모듈러 연산을 해줘서 2차로 오버플로우를 막아야 하는 문제이다 재귀함수라지만 내가 gr로 작성한 부분이 gr=gr*gr 이고 gr=gr*a%c 이라는 부분에서 왜인지 이해하느라 머리가 터졌고 시간도 몇시간을 걸려서 이해했지만, 이해했으니 비슷한 유형도 이제 익숙해질것이다 내일을 공부를 위해 더 늦기전에 자자... #include using namespa.. 2022. 6. 17.