티스토리 뷰
[ BOJ ] 14929번 : 귀찮아 (SIB)
문제 : https://www.acmicpc.net/problem/14929
14929번: 귀찮아 (SIB)
n과 xi가 주어짇나. n은 10만 이하ㅇ고, xi는 젗ㄹ댓값이 100이하인 정수디이다.
www.acmicpc.net
[ 문제 ]

[ 입력 ]
[ 문제 접근 및 풀이 ]
왼쪽의 식처럼 각각의 항들을 직접 2중 for문으로 구하게 된다면
n의 크기가 최대 10만으로 시간초과가 뜰 수 있다.
따라서 오른쪽 식처럼 누적합을 이용하여
[ 소스 코드 1 ]
2중 for문
#include<bits/stdc++.h>
using namespace std;
int arr[100001],N;
long long sum;
void input();
void solve();
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
input();
solve();
}
void input(){
cin >> N;
for(int i=0;i<N;i++) cin >> arr[i];
}
void solve(){
for(int i=0;i<N;i++){
for(int j=i+1;j<N;j++){
sum+=arr[i]*arr[j];
}
}
cout << sum;
}
위 코드는 왼쪽 식처럼 모든 항을 직접 구했을 때 코드이다.
BOJ에 제출하였을 때 역시 시간 초과가 났었다.

[ 소스 코드 2 ]
누적합
#include<bits/stdc++.h>
using namespace std;
int arr[100001],psum[100001],N;
long long sum;
void input();
void solve();
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
input();
solve();
}
void input(){
cin >> N;
for(int i=1;i<=N;i++) {
cin >> arr[i];
psum[i]=psum[i-1]+arr[i];
}
}
void solve(){
for(int i=1;i<N;i++){
sum+=arr[i]*(psum[N]-psum[i]);
}
cout << sum;
}

'BOJ' 카테고리의 다른 글
[ BOJ / C++ ] 21922번 : 학부 연구생 민상 (1) | 2023.10.04 |
---|---|
[ BOJ / C++ ] 12904번 : A와 B (2) | 2023.10.03 |
[ BOJ / C++ ] 15558번 : 점프 게임 (0) | 2023.10.02 |
[ BOJ / C++ ] 11899번 : 괄호 끼워넣기 (0) | 2023.10.02 |
[ BOJ / C++ ] 1012번 : 유기농 배추 (0) | 2023.10.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 다이나믹 프로그래밍
- 그래프 이론
- 너비 우선 탐색
- BOJ
- 분리 집합
- 순열 사이클 분할
- 그래프 탐색
- 브루트포스 알고리즘
- 트리를 사용한 집합과 맵
- 트리에서의 다이나믹 프로그래밍
- 재귀
- 분할 정복을 이용한 거듭제곱
- 누적 합
- 정렬
- 수학
- 자료 구조
- BFS
- 그래프
- 슬라이딩 윈도우
- 스택
- 시뮬레이션
- 파싱
- 그리디 알고리즘
- 해시를 사용한 집합과 맵
- C++
- 문자열
- 깊이 우선 탐색
- 백준
- 트리
- 구현
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함