백준 24523번: 내 뒤에 다른 수

각 위치에 해당하는 숫자와 다른 숫자가 언제 나오는지 출력하는 문제입니다.
역방향 for문, 스택 풀이 등등 방법이 굉장히 많은데, 저는 정방향으로 돌렸습니다.

수열: 4 4 4 4 2 2 2 7 7 7 3 3

위 수열을 예시로 들어보겠습니다.
수열을 하나씩 세면서 첫번째 숫자와 다른 숫자가 언제 처음 나오는지 확인합니다.

5번째 숫자가 다르게 나왔습니다.
앞의 4번째 숫자까지는 모두 같은 숫자라는 뜻이므로 출력해야할 값이 모두 같습니다.
그러므로 4번째까지, 5를 4개 출력해줍니다.

수열: 4 4 4 4 2 2 2 7 7 7 3 3
출력: 5 5 5 5


그리고 5번째 숫자와 다른 숫자가 언제 나오는지 확인합니다.
8번째 숫자가 다르게 나왔습니다. 5번째 숫자부터 7번째 숫자까지 같다는 뜻입니다.
그러므로 7번째까지, 8을 3개(=8-5) 출력해줍니다.

수열: 4 4 4 4 2 2 2 7 7 7 3 3
출력: 5 5 5 5 8 8 8


8번째 숫자와 다른 숫자가 언제 나오는지 확인합니다.
11번째 숫자가 다르게 나왔습니다. 8번째 숫자부터 10번째 숫자까지 같다는 뜻입니다.
그러므로 10번째까지, 11을 3개(=11-8) 출력해줍니다.

수열: 4 4 4 4 2 2 2 7  7  7  3 3
출력: 5 5 5 5 8 8 8 11 11 11


11번째 숫자와 다른 숫자를 찾아야하는데, 더이상 숫자가 없습니다.
그러므로 남은 수 만큼 -1을 출력합니다.

수열: 4 4 4 4 2 2 2 7  7  7  3  3
출력: 5 5 5 5 8 8 8 11 11 11 -1 -1

이렇게 출력을 완료해주시면 됩니다:D

아래는 파이썬 코드입니다.
배열 인덱스가 0부터 시작하므로(=1번째 숫자 인덱스가 0이므로) +1해주면서 출력하시면 됩니다.

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

i = 0 # 찾아야하는 숫자 위치
for j in range(1, N):
    if A[i] != A[j]:
        print((str(j+1)+' ')*(j-i), end='')
        i = j
print(('-1'+' ')*(N-i), end='')

댓글남기기