-- 예전 기록/BOJ

[ BOJ ] 24523 : 내 뒤에 나와 다른 수 ( SILVER 2 ) / Python

rejo 2024. 2. 15. 17:00

>> 문제 바로가기 (https://www.acmicpc.net/problem/24523)

풀이 과정

i번째 수 의 뒤에 나오는 i+1 번째 수가 i번째 수와 같은 수가 아니라면 무조건 i+1이 최솟값 j이다.

같은 수가 연속으로 여러 번 나오다가 다른 수가 나온다면, 다르게 나온 수 앞에 있는 모든 수들의 j 는 해당 다르게 나온 수의 인덱스가 된다.

같은 수가 연속으로 나오는 횟수를 카운팅했다가, 다른 수가 나왔을 때 카운트한만큼 현재 인덱스를 출력하고, 수열의 끝까지 찾았는데도 만족하는 j 가 없는 수들은 -1 을 출력하도록 구현한다.

import sys
input = sys.stdin.readline

n = int(input().rstrip())
arr = list(map(int, input().rstrip().split()))

cnt = 0
for i in range(n):
    if i == 0: cnt += 1
    elif arr[i] == arr[i-1]: cnt += 1
    else:
        for _ in range(cnt):
            print(i+1, end=' ')
        cnt = 1
for _ in range(cnt):
    print(-1, end=' ')