재귀 4

/<> 백준 11729번 : 하노이 탑 이동 순서 (C언어)

https://www.acmicpc.net/problem/11729  하노이 탑의 이동 조건은 작은 원판 위에 큰 원판이 오지 않는 한에서 판을 이동시킬 수 있습니다.n개의 원판이 있을 때 반대 기둥으로 옮기는 움직임의 총횟수는 2^n - 1> 입니다. (원리는 생략...) 재귀 함수를 사용하여 문제를 풀 건데, 문제는 원판의 개수에 따라 이전 원판들이 이동하는 기둥이 달라집니다. 이를 해결하기 위해 각 함수마다 출발 기둥과 경유 기둥, 목표 기둥을 설정하여 각 원판마다 올바르게 움직임을 출력할 수 있도록 해줍니다.  #include void hanoi(int n, int start, int mid, int end) { if(n >= 2) { hanoi(n - 1, start, end,..

백준 2024.09.11

/<> 백준 2630번 : 색종이 만들기 (C언어)

https://www.acmicpc.net/problem/2630  백준 1074번 "Z" 문제과 비슷한 느낌이지만, 더 간단합니다. 색종이를 나누는 기준이 중간에 다른 색이 섞여있을 때잖아요? 그럼 한 영역을 탐색할 때 색이 한 종류면 더 이상 나누지 않고, 중간에 색이 다른 게 섞여 있으면 그 영역을 4등분해서 다시 탐색합니다. 만약 색이 촘촘히 섞여 있으면 영역의 크기가 1이 될 때까지 영역을 4등분 후 다시 탐색하게 될겁니다. 이는 재귀 함수를 통해 구현하면 됩니다. 함수는 탐색을 시작하는 배열의 시작 인덱스와 영역의 크기를 입력받도록 합니다. 그리고 그 영역 내의 종이 색이 한 종류면 해당 색의 종이 개수를 추가하고, 두 종류면 영역의 크기를 4등분 하여 함수를 호출합니다.  #include i..

백준 2024.08.31

/<> 백준 12919번 : A와 B 2 (C언어)

https://www.acmicpc.net/problem/12919 처음엔 BFS로 S에 A 또는 B를 붙이면서 경우의 수를 늘려가 T와 같아지는 순간이 생기면 1을 출력하고 프로그램이 종료되는  방식을 구상하였으나 문자열이기도 하고, 뒤집는 경우도 생각해야 하기에 잘 풀리지 않았습니다.그러다 반대로 T를 기준으로 A 또는 B를 없애면서 S와 같아지는 순간을 찾는 방식이 훨씬 간단하다는 것을 깨달았습니다.이 때 위의 예시 1번을 보면 T가 인 경우, S가 일 때와 일 때 각각 알파벳 제거 과정이 마지막에 달라집니다.  두 경우를 모두 감안하여 두 경우 각각 재귀 함수를 돌려야 합니다.  1. 재귀 함수의 결과를 올바르게 출력하기 위해 출력 변수 check를 전역 변수로 0으로 선언합니다. 2. T의 맨 ..

백준 2024.07.29

/<> 백준 1074번 : Z (C언어)

https://www.acmicpc.net/problem/1074  이 문제 속 2차원 배열의 특징은 사분면을 이루면서 정사각형 형태를 이룬다는 것입니다.문제의 배열 이미지에 사분면을 구분해보겠습니다.  N = 1인 경우 사분면을 나눈 모습 N = 2인 경우 사분면을 나눈 모습 N = 3인 경우 사분면을 나눈 모습  1. r행 c열의 위치가 배열에서 몇 사분면에 있는지 판단합니다. 2. 0을 초기값으로 설정하고, 몇 사분면인지와 배열의 크기에 따라 가중치를 더합니다. 3. 초기값에 가중치를더한 후 해당 사분면을 새로운 기준으로 1번째 과정과 2번째 과정을 반복합니다. 4. 가중치는 배열의 크기 N을 기준으로 4^(N-1)입니다(배열이 커지는 과정과 동일). 새로운 사분면으로 진행 시 r과 c의 크기도 사..

백준 2024.07.20