본문 바로가기

재귀함수

백준 알고리즘 15686 입력 : 도시의 크기와 유지할 치킨집의 최대 개수 M, 도시 정보 출력 : 치킨집의 최대 개수(M)만큼을 제외하고 모두 폐점시켰을 때 치킨거리의 최소값 풀이 1. 입력받을 때 치킨집과 가정집의 위치를 따로 벡터에 저장한다. 2. 모든 치킨집 중 M개를 고르는 재귀함수를 구현해 M개를 고른 뒤 치킨거리를 구한다. 3. 치킨집을 고른 결과가 중복이 되지 않도록 재귀함수를 구현한다. 중복처리 안하면 시간초과남 #include #include #include #include using namespace std; struct Point{ int x; int y; }; Point getPoint(int x, int y){ Point result; result.x = x; result.y = y; return res..
백준 알고리즘 15685 입력 : 드래곤 커브 갯수, 각 드래곤 커브의 시작점과 시작 방향 및 세대 출력 : 네 꼭지점이 모두 드래곤커브인 정사각형의 갯수 풀이 1. 한 드래곤 커브에 대한 정보를 입력받으면 바로 드래곤커브를 그린다. 2. 최소 1세대 이상이기 때문에 0세대 드래곤커브를 우선 그린다. 3. 세대만큼 반복문을 사용해 드래곤 커브를 그린다 - 각 점을 드래곤커브의 마지막 점을 기준으로 시계방향 90도 회전한 지점에 복사한다. 이를 위한 식은 다음과 같다. x = p.x - stdp.x; y = p.y - stdp.y; return getPoint(stdp.x - y, stdp.y + x); - 드래곤 커브는 bool 2차원 배열에 표현한다. 4. 모든 드래곤 커브를 그린 다음 전체 판에서 꼭지점이 모두 드래곤커브인 ..
백준 알고리즘 14888 입력 : 연산할 수열, 연산자별 사용 가능한 갯수 출력 : 연산 결과로 나온 경우의 수 중에서 최대값과 최솟값 풀이 1. 재귀함수 한 번은 배열의 숫자 사이에 연산자를 하나 넣어본 것과 같다. 2. 함수를 한번 호출해 연산자를 넣어 계산한 뒤 재귀호출 3. 수열의 맨 마지막 수를 지나치면 전역변수 maxR과 minR을 연산 결과값이랑 비교해 갱신하고 return. 4. 연산자 사용시 opSymbol에 남은 횟수를 갱신해야 함 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 ..