[ 해결 방법 ]재귀를 이용해서 문제를 풀었다. 재귀함수(시작점, 종료점)처럼 함수를 만들었다. 시작점부터 종료점까지 for문을 돌면서 색이 모두 같으면 그 색을 출력했고 다르면, 시작점부터 종료점까지의 면적을 4등분해서 4개의 재귀를 호출했다. [ 코드 ]#include #define MAX65using namespace std;int N;bool img[MAX][MAX];void div(int sx, int sy, int ex, int ey){bool p_cr, cr;int cnt = 0;p_cr = cr = img[sy][sx];for (int y = sy; y
[ 해결 방법 ]단순 BFS 문제이다. 현재 수빈이의 위치에서 갈 수 있는 방향(X+1, X-1, 2*X)을 큐에 넣고 K가 나올 때까지 계속 반복하면 된다. [ 코드 ]#include #include using namespace std;struct pos{int x, t;};int N, K, Max;queue q;bool visit[200001];int dir[3] = { -1,1,1 };int main(){cin >> N >> K;if (N == K){cout
[ 해결 방법 ]N을 몇 개 진행해보니까 피보니치 수열임을 알았다. 피보나치를 구현할 때 재귀로 구현하면 안된다. 이렇게 구현하면 불필요한 재귀를 호출하기 때문에 메모리 초과가 난다.fibo(10) fibo(9) fibo(8)fibo(8) fibo(7) fibo(7) fibo(6) 위에 그림처럼 fibo(8), fibo(7)을 이미 구했는데 불필요하게 호출한다. N이 커질 수록 이런 일은 더 많이 발생한다.생각해보면 피보나치는 fibo(n) = fibo(n-1) + fibo(n-2)이기 때문에 현재 값을 구하기 위해서 2개의 수만 알면된다. 이전값과 그 이전값. 그래서 변수 3개만 있으면 피보나치를 효율적으로 구현할 수 있다. 마지막으로 모듈러연산의 성질을 이용한다. 성질 1 : (a + b) % n =..