Notice
Recent Posts
Recent Comments
Link
알고리즘 모음(C++)
백준 25431 - 인공신경망(C++) 본문
문제 링크입니다. https://www.acmicpc.net/problem/25341
구현 문제였습니다.
문제만 이해하면 쉽게 풀 수 있는 사칙연산 문제였습니다.
하지만 입력되는 데이터의 갯수가 많아서 시간 초과가 생기기 쉽습니다.
문제를 해결하기 위해선 연산 횟수를 줄이는 것이 필수였습니다.
저는 X번째 입력층에 곱해야할 값을 한번에 계산해준 뒤, 이를 마지막에 곱해주는 방식을 사용했습니다.
// 출력층 입력
for (int i = 1; i <= M; i++) {
int x;
scanf("%d", &x);
for (int j = 0; j < Add_input[i].size(); j++) {
multiple_Input[Add_input[i][j]] += (Hidden[i][j] * x);
}
weight[i] *= x;
}
코드에서 이부분을 보았을 때, X번째 입력층에 곱해줘야 할 값들을 전부 구하는 코드입니다.
해당 작업을 거친 뒤, 한번에 계산 했을 때, 시간 초과를 피할 수 있었습니다.
자세한 것은 코드를 참고해주세요
#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <deque>
#define P pair<int, int>
#define PP pair<P, int>
#define F first
#define S second
#define LL long long
using namespace std;
int N, M, Q;
vector<LL> Add_input[2001];
vector<LL> Hidden[2001];
LL weight[2001];
LL weight_Print;
vector<LL> Input[2001];
LL multiple_Input[2001];
void solve() {
LL sum_last = 0;
for (int i = 1; i <= M; i++) {
sum_last += weight[i];
}
sum_last += weight_Print;
for (int i = 1; i <= Q; i++) {
LL Sum = 0;
for (int j = 1; j <= N; j++) {
Sum += Input[i][j - 1] * multiple_Input[j];
}
Sum += sum_last;
cout << Sum << "\n";
}
}
int main() {
cin.tie(0);
cout.tie(0);
cin >> N >> M >> Q;
// 은닉층 입력
for (int i = 1; i <= M; i++) {
int C;
scanf("%d", &C);
for (int j = 1; j <= C; j++) {
int x;
scanf("%d", &x);
Add_input[i].push_back(x);
}
for (int j = 1; j <= C; j++) {
int x;
scanf("%d", &x);
Hidden[i].push_back(x);
}
cin >> weight[i];
}
// 출력층 입력
for (int i = 1; i <= M; i++) {
int x;
scanf("%d", &x);
for (int j = 0; j < Add_input[i].size(); j++) {
multiple_Input[Add_input[i][j]] += (Hidden[i][j] * x);
}
weight[i] *= x;
}
cin >> weight_Print;
// 입력층 입력
for (int i = 1; i <= Q; i++) {
for (int j = 1; j <= N; j++) {
int x;
scanf("%d", &x);
Input[i].push_back(x);
}
}
solve();
return 0;
}
질문 및 조언은 댓글 남겨주세요
'백준' 카테고리의 다른 글
백준 10176 - Opposite Words(C++) (0) | 2022.08.21 |
---|---|
백준 17504 - 제리와 톰(C++) (0) | 2022.08.21 |
백준 1726 - 로봇(C++) (0) | 2022.08.11 |
백준 6087 - 레이저 통신(C++) (0) | 2022.08.10 |
백준 20055- 컨베이어 벨트 위의 로봇(C++) (0) | 2022.08.01 |