문제 링크입니다: https://www.acmicpc.net/problem/13144
투포인터를 이용해 풀었으며 경우의 수가 int 범위를 넘어갈 수 있는 문제였습니다.
알고리즘은 아래와 같습니다.
1. 포인터 두 개를 모두 0으로 초기화한 후 구간 내 중복된 숫자가 나올 때까지 right를 증가시켜 구간을 넓힙니다.
2. 구간 내 중복된 숫자가 나올 경우 left를 하나 증가시켜 구간 내 중복된 숫자를 제거하고 중복된 숫자가 포함되었던 순열의 경우의 수를 결과에 더해줍니다.
- 예제 입력 #2에서 [1, 2, 3, 1]이 될 경우 left를 하나 증가시켜 [2, 3, 1]로 만들고 중복된 숫자가 포함되었던 순열 [1], [1, 2], [1, 2, 3]의 경우의 수 3을 result에 더해줌
3. right가 N 미만일 때까지 1번, 2번 과정을 반복합니다.
4. 3번까지 완료된 이후 구간 내 순열 경우의 수를 result에 더해주고 출력해 줍니다.
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 12094번 2048 (Hard) (1) | 2024.04.21 |
---|---|
백준 2776번 암기왕 (0) | 2024.04.20 |
백준 14469번 소가 길을 건너간 이유 3 (0) | 2024.04.08 |
백준 2109번 순회강연 (0) | 2024.04.06 |
백준 2170번 선 긋기 (0) | 2024.04.03 |