필요(96)
-
[백준/C++]#11057 - 오르막 수
풀이 #include using namespace std; int main() { int n; cin >> n; int a[1001][1001]; for (int i=0; i
2021.01.22 -
[백준/C++]#10844 - 쉬운 계단 수
풀이 #include using namespace std; int main() { int n; cin >> n; int a[101][101];// 2차원 배열 정의 for (int i=1; i
2021.01.21 -
[백준/C++]#2193 - 이친수
풀이 #include using namespace std; int main() { long long a[91],b[91]; int n; cin >> n; a[1]=0,b[1]=1; for (int i=2; i n; D[1][0]=0, D[1][1]=1; for (int i=2; i n; D[1]=1, D[2]=1; for (int i=3; i
2021.01.20 -
[백준/C++]#9095 - 1, 2, 3 더하기
풀이 #include using namespace std; int main() { int t; cin >> t;// 테스트의 개수를 받음 while (t--) {// 그만큼 반복 int n; cin >> n; int D[1001]; D[1]=1, D[2]=2, D[3]=4; for (int i=4; i t; while (t--) {// 테스트 횟수만큼 반복 int n; cin >> n; cout
2021.01.18 -
[백준/C++]#11727 - 2xn 타일링2
풀이 #include using namespace std; int main() { int n; cin >> n; int D[1001]; D[1]=1, D[2]=3; for (int i=3; i
2021.01.18 -
[백준/C++]#11726 - 2xn 타일링
풀이 #include using namespace std; int main() { int n; cin >> n; int D[1001]; D[1]=1,D[2]=2;// n=1, n=2일 때의 2xn 타일링 수 for (int i=3; i> n; cout 0) return D[k]; 이 줄이 없으면 시간초과가 발생한다. 이를 사용한 중복제거가 생각보다 훨씬 중요한 것 같다. 이 방법 외에, 안타깝게도 처음 접근시 아주 복잡한 해결책을 생각했다. 2a + b = n으로 놓고, a와 b를 반복문을 통해 구한 뒤 그 값을 팩토리얼에 넣은 뒤, 모두 합해준다. 이론상으로는 가능하게 생각된다. #include using namespace std; int fact(int n){// 팩토리얼 함수 if (n < 2) r..
2021.01.17 -
[백준/C++]#1463 - 1로 만들기
풀이 #include using namespace std; int D[1000000];// 함수 값 저장하기 위한 배열 정의 int makeone(int n) { if (n == 1) return 0;// n이 1일 때 0 값 반환 if (D[n] > 0) return D[n];// 배열 값이 존재할 때 배열 값 반환 D[n] = makeone(n-1) + 1; if (n % 2 == 0) {// 2로 나눠지면서 n/2가 더 작은 경우였다면 D[n]에 저장 if (makeone(n-1) > makeone(n/2)) D[n] = makeone(n/2)+1; } if (n % 3 == 0) {// 3으로 나눠지면서 n/3이 더 작은 경우였다면 D[n]에 저장 if (makeone(n-1) > makeone(..
2021.01.15 -
[백준/C++]#10820 - 문자열 분석
풀이 #include #include using namespace std; int main() { string s; while (getline(cin, s)) {// 문자열을 입력받을 때마다 반복 int a=0,b=0,c=0,d=0; for (int i=0; i= 'a' && s[i] = 'A' && s[i] = '0' && s[i]
2021.01.14 -
[백준/C++]#1158 - 요세푸스 문제
풀이 #include #include using namespace std; int main() { int n,k,i; cin >> n; queue s; for (int i=1; i k; i = 1; while (n-1) {// n-1이 0이 될 때까지 반복문 수행 if (i % k != 0) {// i 나누기 k의 나머지가 0이 아닐 때 front 값을 다시 큐에 넣고 pop s.push(s.front()); s.pop(); } else {// i 나누기 k의 나머지가 0일 때 front 값을 출력하고 pop cout
2021.01.14