728x90

문제)

길이가 N인 수열 A1 A2 ⋯ AN이 주어진다. 1≤i≤N인 정수 i마다 i<j≤N이고 Ai≠Aj인 정수 j중 최솟값을 출력하라.

만약 이러한 j가 없다면 −1을 출력하라.

 

입력)

첫째 줄에 수열 A의 크기 N이 주어진다. 둘째 줄에는 A1 A2 ⋯ AN이 공백으로 구분되어 주어진다. 

(1 ≤ N ≤ 106, −109 ≤ Ai ≤109) 입력으로 주어지는 모든 수는 정수이다.

 

출력)

각 i마다 조건을 만족하는 최솟값 j를 출력하라. 만약 이러한 j가 없다면 −1을 출력하라.


T = int(input())
num = list(map(int, input().split()))
num_count = 1; num_idx = []
for i in range(1, T):
    if num[i-1] != num[i]:
        num_idx.append([i+1, num_count])
        num_count = 1
    else:
        num_count += 1
num_idx.append([-1, num_count])
for item in num_idx:
    print((str(item[0])+' ')*item[1], end='')

풀이 : 바로 앞 숫자와 현재 숫자가 같으면 num_count 에 1을 더해주고 다르면 현재 위치와 num_count를 num_idx에 추가해준다. 그러면 현재 위치와 바로 앞 숫자의 반복 횟수가 저장된 리스트가 만들어지게 된다. 마지막은 항상 -1이 들어가므로 -1과 앞숫자의 반복횟수를 마지막으로 추가해준 뒤 입력된 값들의 정보를 출력해주면 된다.

+ Recent posts