https://www.acmicpc.net/problem/1107 최솟값의 초기값은 초기 채널에서 +,-만 눌러서 목표채널로 이동하는 횟수. 이 값보다 버튼 클릭 횟수가 커지면 최솟값이 될 수 없다. 채널을 0부터 시작해서 1씩 증가시키며 현재 채널이 리모컨으로 입력 가능한지 확인한다.입력 가능하면 목표채널까지 몇번만에 갈 수 있는지 확인. 이때 리모컨 입력 횟수는 "현재 채널을 입력하고 +,-만 입력하여 목표채널로 간 횟수"이 값이 최솟값보다 작으면 최솟값을 업데이트 해준다.현재 채널을 입력하는 횟수는 채널의 자릿수 길이고 +,-만 입력하여 목표채널로 가는 횟수는 현재채널과 목표채널의 차이값이다. 채널 탐색 범위가 500,000을 초과하는 이유예를 들어 목표채널이 500,000인데 6 버튼 만 입력 가..
https://www.acmicpc.net/problem/1168 1~n 까지 배열을 만들고 인덱스를 업데이트 하면서 해당 인덱스 값을 빼오고 배열에서 제거한 후 다음 인덱스로 넘어갑니다.인덱스 업데이트 과정x번째 인덱스에서 값을 빼왔으면 다음 인덱스는 x+(m-1) 입니다. 그 이유는 x번째 인덱스를 제거한 후 이동하기 때문에 인덱스가 한칸 씩 당겨지고 +m-1만 이동해도 +m번째 인덱스에 접근하는 것과 같은 효과가 나옵니다.그런데 x+(m-1)의 값이 전체 배열의 크기를 넘어갈 수 있으므로 (x+(m-1))%(현재 배열의 크기)로 나머지만 구하여 인덱스가 범위를 넘어갈 경우 다시 0번부터 접근 가능하게 해줍니다.예를 들어 아래 표의 3번째 줄 인덱스는 4+(3-1) % 5 == 1 입니다.이 과정을 ..
https://www.acmicpc.net/problem/2193 이진수 10이 존재할때 1을 1번째 자리 수, 0을 2번째 자리수와 같이 표현할 수 있다.n번째 자리수가 0이라면 n-1번째 자리수는 0또는 1이고, n번째 자리수가 1이라면 n-1번째 자리수는 0이다.즉 n번째 자리수가 0일 경우의 수는 n-1번째 자리수가 0일 경우의 수와 1일 경우의 수의 합이고n번째 자리수가 1일 경우의 수는 n-1번째 자리수가 0일 경우의 수와 같다. 점화식arr[n][m] : n번째 자리수가 m일 경우의 수arr[0][0] = 0arr[0][1] = 1arr[n][0] = arr[n-1][0] + arr[n-1][1]arr[n][1] = arr[n-1][0] C++ code길이 N=90인 이친수는 2,880,06..
https://www.acmicpc.net/problem/10844 45656 이라는 숫자가 존재한다고 할때 4는 1번째 자리 수, 5는 2번째 자리 수 6은 3번째 자리 수, 5는 4번째 자리 수, 6은 5번째 자리 수로 표현할 수 있다.n번째 자리 수가 0일경우 n+1번째 자리수는 1만 가능하며 n번째 자리 수가 9일 경우 n+1번째 자리수는 8만 가능하다.n번째 자리 수가 1~8인 경우는 n+1번째 자리수에 각각 2개의 숫자가 존재할 수 있다. (예: n번째 자리 수가 1인경우 0 또는 2, n번째 자리 수가 4인경우 3 또는 5)즉,n+1번째 자리에서 0이 나올 수 있는 경우의 수
https://www.acmicpc.net/problem/9095 기본숫자는 1,2,3n번째 숫자는 n-3번째 결과에 3을 더하고 n-2번재 결과에 2를 더하고 n-1번째 결과에 1을 더한것의 합계로 표현가능하다.점화식arr[0] = 1arr[1] = 2arr[2] = 4arr[n] = arr[n-1] + arr[n-2] + arr[n-3] C++ code1234567891011121314151617181920#include using namespace std;int main(){ int t; cin >> t; for(int tc = 0; tc > n; int* arr = new int[n]; arr[0] = 1; arr[1] = 2; arr[2] = 4; for(int i = 3; i
https://www.acmicpc.net/problem/11727 https://neroren.tistory.com/78 과 유과 유사한 문제위 문제에서 2x2 기본도형이 하나 더 추가되었다.이 경우 n-2번째 도형에 붙일 수 있는 2x2 기본도형이 2가지 이므로 곱하기 2를 해주어야 한다. 점화식 arr[0] = 1arr[1] = 3arr[n] = arr[n-1] + 2 * arr[n-2] C++ code123456789101112131415#include using namespace std;int main(){ int n; cin >> n; int *arr = new int[n]; arr[0] = 1; arr[1] = 3; for(int i = 2; i
https://www.acmicpc.net/problem/11726 다음과 같이 두개의 기본 도형이 존재한다.N번째 도형(2xN)을 만들 때 N-2번째 도형과 N-1번째 도형에 기본도형을 덧붙여서 만들 수 있다. 중복을 피하기 위해 한쪽 방향에만 계속하여 덧붙인다.N-2번째 도형에는 2x2 기본도형을 오른쪽(왼쪽)에 붙이고 N-1째 도형에는 2x1 기본도형을 오른쪽(왼쪽)에 붙여서 만들 수 있다.점화식 arr[0] = 1arr[1] = 2arr[n] = arr[n-1] + arr[n-2] C++ code123456789101112131415#include using namespace std;int main(){ int n; cin >> n; int *arr = new int[n]; arr[0] = 1; ..