-
반응형
https://www.acmicpc.net/problem/16162
16162번: 가희와 3단 고음
첫째 줄에 참가자들의 음의 개수를 나타내는 정수 N(1 ≤ N ≤ 2 x 104), 고음의 첫 항과 공차를 의미하는 정수 A, D(1 ≤ A, D ≤ 107)가 공백으로 구분되어 주어진다. 둘째 줄에 참가자들의 음을
www.acmicpc.net
-풀이-
처음엔 문제가 이해되지않아서 곰곰히 문제를 다시보니, 등차수열의 최대 개수를 찾아야되는 문제이다.
등차수열이란 An=A0+d(n-1) 을 만족하는 식이된다.
이문제를 풀기위해 나는 stack자료형을 사용하여 배열을 한번 쭉 탐색했다. 탐색하면서.
1) 먼저 스택이 비어있을땐, 처음항인 a가 들어와야 한다.
2) 스택이 비어있지 않을때는, 스택의 top부분이 연속되는 등차수열의 마지막항이 되므로, 스택의 TOP에있는 원소+d가 있다면, push를 한다.
이렇게 등차수열의 최대 개수(스택의 사이즈) 를 출력하면된다.
-시간복잡도-
배열을 한번 탐색하면 되므로 O(N)이 걸린다.
-코드-
#include<iostream> #include<algorithm> #include<stack> using namespace std; int arr[20001]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, a, d; int answer = 0; stack<int> st; cin >> n >> a >> d; for (int i = 0; i < n; i++) { cin >> arr[i]; } for (int i = 0; i < n; i++) { int now = arr[i]; if (now==a&&st.empty()) { st.push(now); } else { if (!st.empty()&&st.top() + d == now) { st.push(now); } } } cout << st.size() << "\n"; return 0; }
반응형'문제풀이 > 백준oj' 카테고리의 다른 글
[백준OJ] 11034번 캥거루 세마리2 (0) 2021.06.20 [백준OJ] 12851번 숨바꼭질 2 (0) 2021.06.12 [백준OJ] 17070번 파이프 옮기기 (0) 2021.06.10 [백준OJ] 9465번 스티커 (0) 2021.06.09 [백준OJ] 21758번 꿀 따기 (0) 2021.06.08 댓글