[Python] 백준/BOJ 31395번: 정렬된 연속한 부분수열의 개수 (Silver 4)

2025. 7. 17. 12:27·Algorithm/백준 (BOJ)
반응형

💻 Problem

문제 보러 가기

 

길이가 N인 수열 A_1, ..., A_N이 주어집니다. 수열의 모든 수는 서로 다른 1 이상 N 이하의 수입니다. 아래 조건을 모두 만족시키는 (i, j) 정수쌍의 개수를 구하세요.

  •  1 <= i <= j <= N.
  •  A의 i번째 수부터 j번째 수까지가 오름차순으로 배열되어 있다. 즉, i <= k < j를 만족하는 모든 정수 k에 대해 A_k < A_{k+1}.

 

💡 Approach

처음에 예제 이해가 잘 안됐는데 문제 내용은 아래와 같다.

(i, j) 구간의 수열이 정렬된 연속한 부분수열이면 만족한다.

만족하는 경우의 (i, j) 정수쌍 개수를 구하면 된다.

 

N의 범위가 1 <= N <= 200,000이므로 이중반복문을 쓰면 안 된다.

반복문을 하나만 쓰는 방법을 생각해야 한다.

 

오름차순 구간 길이에 따른 (i, j) 쌍 개수를 구해보면 아래와 같다.

오름차순 구간 길이 (i, j) 쌍 개수 가능한 (i, j) 쌍
1 1 (1, 1)
2 3 (1, 1), (1, 2), (2, 2)
3 6 (1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)
4 10 (1, 1), (1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4), (3, 3), (3, 4), (4, 4)

...

이를 식으로 도출하면 오름차순 구간 길이가 s일 때, (i, j) 쌍 개수는 s * (s + 1) // 2가 된다.

 

✏️ Solution

import sys
input = sys.stdin.readline

N = int(input())
A = list(map(int, input().split()))

cnt = 0
s = 1

for i in range(1, N):
    if A[i - 1] < A[i]:
        s += 1
    else:
        cnt += s * (s + 1) // 2
        s = 1

cnt += s * (s + 1) // 2

print(cnt)
  • 시간복잡도: O(n)
반응형

'Algorithm > 백준 (BOJ)' 카테고리의 다른 글

[Python] 백준/BOJ 1715번: 카드 정렬하기 (Gold 4)  (0) 2025.07.24
[Python] 백준/BOJ 1515번: 수 이어 쓰기 (Silver 3)  (0) 2025.07.19
[Python] 백준/BOJ 9095번: 1, 2, 3 더하기 (Silver 3)  (0) 2025.07.16
[Python] 백준/BOJ 26042번: 식당 입구 대기 줄 (Silver 5)  (0) 2025.07.15
'Algorithm/백준 (BOJ)' 카테고리의 다른 글
  • [Python] 백준/BOJ 1715번: 카드 정렬하기 (Gold 4)
  • [Python] 백준/BOJ 1515번: 수 이어 쓰기 (Silver 3)
  • [Python] 백준/BOJ 9095번: 1, 2, 3 더하기 (Silver 3)
  • [Python] 백준/BOJ 26042번: 식당 입구 대기 줄 (Silver 5)
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (196) N
      • SSAFY (10)
      • Algorithm (114) N
        • 이론 (6)
        • 백준 (BOJ) (107) N
        • 프로그래머스 (1)
      • Trouble Shooting (9)
      • Frontend (6)
      • React (17)
      • Next.js (4)
      • Vue (4)
      • Node.js (2)
      • HTML (9)
      • DevOps (4)
        • Git (4)
      • Language (9)
        • JavaScript (0)
        • Java (9)
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    티스토리챌린지
    React
    브루트포스
    순열
    dfs
    재귀
    html5
    SSAFY
    Heap
    중복조합
    알고리즘
    백준
    bfs
    수학
    힙
    중복순열
    파이썬
    오블완
    백트래킹
    싸피
    강의
    우선순위큐
    Next.js
    DP
    구현
    SSAFYcial
    Algorithm
    Error
    블록체인
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
올콩
[Python] 백준/BOJ 31395번: 정렬된 연속한 부분수열의 개수 (Silver 4)
상단으로

티스토리툴바