728x90
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 | 32 MB | 11798 | 4279 | 3077 | 34.461% |
문제
길이가 N인 수열이 주어질 때, 수열에서 연속한 1개 이상의 수를 뽑았을 때 같은 수가 여러 번 등장하지 않는 경우의 수를 구하는 프로그램을 작성하여라.
입력
첫 번째 줄에는 수열의 길이 N이 주어진다. (1 ≤ N ≤ 100,000)
두 번째 줄에는 수열을 나타내는 N개의 정수가 주어진다. 수열에 나타나는 수는 모두 1 이상 100,000 이하이다.
출력
조건을 만족하는 경우의 수를 출력한다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
long long N, iResult = 0;
long long llCount[100'001];
long long llNum[100'001];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N;
for (int i = 0; i < N; ++i)
cin >> llNum[i];
long long temp1= 0, temp2 = 0;
while (temp1 < N)
{
if (!llCount[llNum[temp1]])
{
++llCount[llNum[temp1]];
++temp1;
}
else
{
iResult += (temp1 - temp2);
--llCount[llNum[temp2]];
++temp2;
}
}
iResult += (long long)(temp1 - temp2) * (temp1 - temp2 + 1) / 2;
cout << iResult;
return 0;
}
수열의 합 공식과 그리디를 이용하여 풀이
728x90
'프로그래밍 > 백준, 프로그래머스 문제 풀이' 카테고리의 다른 글
백준 17144 미세먼지 안녕! 풀이 (c++) (0) | 2025.03.09 |
---|---|
백준 1700 멀티탭 스케줄링 풀이 (c++) (0) | 2025.03.09 |
소수의 연속합 - 1644 풀이 C++ (0) | 2025.03.05 |
백준 1202 보석도둑 풀이(c++) (0) | 2025.03.05 |
백준 2109 순회강연 풀이(c++) (0) | 2025.03.05 |
댓글