문제
https://www.acmicpc.net/problem/24523
풀이
첫 번째 풀이
각 i에 대해 모든 경우를 살펴보면서 조건을 만족하는 j를 출력하려고 했다.
for문을 두 번 도는 코드다보니 당연하게도(?) 시간 초과가 떴다.
더보기
N = int(input())
A = list(map(int, input().split()))
answer = [-1] * N
for i in range(N-1) :
for j in range(i+1, N) :
if A[i] != A[j] : # 조건 만족
answer[i] = (j+1)
break
print(*answer)
→ 시간 초과
두 번째 풀이
예제 1 처럼 같은 숫자가 반복되어 나타나는 경우, 조건을 만족하는 최솟값 j는 같은 값일 것이므로 굳이 모든 i에 대해 다 살펴볼 필요가 없다.
이 점에 집중하며, for문을 한 번만 돌도록 코드를 수정했다.
N = int(input())
A = list(map(int, input().split()))
answer = [-1] * N
i = 0
for j in range(1, N) :
if A[i] != A[j] :
answer[i:j] = [j+1] * (j-i)
i = j
print(*answer)
728x90