일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- IT 트렌드
- SSAFYcial
- KT
- it 이슈
- java 객체지향 프로그래밍
- 네트워크 관리사 2급 실기
- 프로그래머스
- 우테코
- 구글
- SSAFY 7기
- IT 동향
- 신문 스크랩
- 백준위
- 싸피
- 네트워크 관리사
- it 뉴스
- 신문스크랩
- html
- python
- 인앱결제
- 카카오
- 백준
- 코딩테스트 연습
- 코테
- 네트워크 관리사 2급
- Java
- 싸피셜
- SSAFY
- 리얼클래스
- 코딩테스트
Archives
- Today
- Total
개발자일걸요..?
9184번 신나는 함수 실행 본문
728x90
반응형
문제링크 : www.acmicpc.net/problem/9184
9184번: 신나는 함수 실행
입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.
www.acmicpc.net
<알고리즘>
1) 우선 주어진 조건에 따라 분기를 실행하여 재귀 함수 구조를 만든다.
2) 앞에서 이미 한 연산을 뒤에서 또하면 시간이 너무 많이 소요되기에 이미 한 연산은 3차배열을 통해 저장한다.
3) 이미 앞서 계산한 값이 있으면 그 값을 return하고 없으면 계산하는 과정을 거친다.
메모리 : 2052KB 시간 : 504ms
#include <iostream>
using namespace std;
int d[21][21][21];
int w(int a, int b, int c) {
if ((a <= 0) || (b <= 0) || (c <= 0)) return 1;
else if ((a > 20) || (b > 20) || (c > 20)) return w(20, 20, 20);
else if ((a < b) && (b < c)) {
if (d[a][b][c] != 0) return d[a][b][c];
return d[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
}
else {
if (d[a][b][c] != 0) return d[a][b][c];
return d[a][b][c] = w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
}
}
int main() {
int a = 0;
int b = 0;
int c = 0;
while (true) {
cin >> a >> b >> c;
if (a == -1 && b == -1 && c == -1) break;
cout << "w(" << a << ", " << b << ", " << c << ") = " << w(a, b, c) << "\n";
}
}
반응형
'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글
9461번 파도반 수열 (0) | 2021.03.04 |
---|---|
1904번 01타일 (0) | 2021.03.03 |
1629번 곱셈 (0) | 2021.03.02 |
1780번 종이의 개수 (0) | 2021.03.01 |
1992번 쿼드트리 (0) | 2021.03.01 |
Comments