문제 링크2447 별 찍기 - 10 접근처음에는 단순히 별을 print 하려고 생각했으나 계속 실패하자 나에게 익숙한 2차원 공백 배열에 원소를 집어 넣는 방식으로 해결했다. 27 * 27 사각형을 9개로 쪼개 봤을 때, 가운데만 비어 있으므로 이걸 그대로 코드로 옮겨 주었다. 재귀 함수void PrintStars(int n, int x, int y) base conditionn을 계속 3으로 나누다가 1이 되면 별을 찍기로 했다. 재귀 식 for (int i = 0; i x, y 좌표를 3의 배수씩 옮겨 다시 별을 찍도록 했다. 이때 n * n 사각형 기준 가운데가 비어있기 때문에 조건식을 추가하여 건너뛰게 만들었다. 전체 코드#define _CRT_SECURE_NO_WARNINGS#include ..
문제 링크1780 종이의 개수접근재귀 함수라고 생각하고 너무 겁먹고 들어갔더니 처음엔 정말 안 풀렸다. 끙끙 앓다가 그냥 생각나는대로 로직을 추상적으로 짜서 도전해 보았다.알고리즘1. 현재 범위 내의 종이가 다 같은 종류의 종이인지 확인한다.1-1. 만약 같은 종류라면 해당하는 종이의 카운트를 증가시킨다.1-2. 만약 다른 종류라면 9등분해서 똑같이 1을 반복한다.의사 코드#include #include using namespace std;vector> papers;int N;int paper[3];void Solve(int x, int y, int n){ if (/*만약 같은 종류의 종이라면*/) { paper[/*종이 인덱스*/]++; return; } ..
문제 링크17478 재귀함수가 뭔가요?접근우선 어제 배웠던 3단계 방식을 토대로 차례대로 접근하였다.함수 원형 설정base condition 설정재귀 식 구현1. 함수 원형 설정출력만 하는 것이므로 void 형, 또 횟수를 받아야 할 것 같아서 매개변수를 int n으로 줬다.void Solve(int n);2. base condition 설정 함수가 어떤 조건에서 멈출지 생각해 보았는데, n을 1씩 증가시킬 때 n이 사용자가 입력한 수가 되면 "재귀 함수가 뭔가요?"에 대한 질문을 하고 거기서 함수를 다시 호출하지 않고 답변을 하는 것을 볼 수 있다. 따라서 n == N일 때, 답변하고 끝마무리까지 하고 return 하게끔 설정했다.3. 재귀 식 구현void Solve(int n){ // 질문 if..
재귀 함수 문제를 풀기 전에다음과 같은 세부 사항을 잘 정리해나가면 푸는 데에 많은 도움이 된다. 1. 함수의 정의2. base condition3. 재귀 식문제 링크[1074 Z] 접근딱 봐도 반복되는 모양을 보아하니 재귀를 쓰면 알맞을 것 같았다. 하지만 재귀 함수를 써야 한다는 건 알아도 어떻게 써야 하는지는 잘 몰랐기 때문에 위의 세부 사항을 정리해 보았다. 1. 함수의 정의직관적으로 정의하면 된다.// 2^n * 2^n 배열에서 (r, c)를 방문하는 순서를 반환하는 함수int func(int n, int r, int c) 2^n이 int 범위 안에 들어오는지도 신경을 써야 한다. 문제에서 n이 15 이하라고 했으니 범위에 잘 맞다.2. base conditionif(n == 0) return..
문제 링크[1629 곱셈]접근그냥 무턱대고 그대로 구현하면 맞힐 수 없다. 따라서 나머지 연산의 특징을 잘 이해해야 한다. 나는 감이 안 잡혀서 풀이를 따라 하면서 이해했다.풀이 참고[실전 알고리즘] 0x0B강 - 재귀나머지 연산의 특징1. a와 b의 표현식a = q1 * m + r1b = q2 * m + r2a와 b를 나눗셈의 몫(q1, q2)과 나머지(r1, r2)로 나타낸 것이다.q1과 q2는 정수 몫이다.r1과 r2는 a mod m, b mod m으로 정의된 나머지이다.즉, r1 = a % m이고, r2 = b % m이다.2. a * b를 전개두 수 a와 b를 곱해보면 다음과 같다:a * b = (q1 * m + r1) * (q2 * m + r2) 이걸 전개하면a * b = (q1 * q2 * m..