본문 바로가기
코딩 테스트 문제 풀이

Do it 알고리즘 코딩 테스트 - 12번

by 김복칠 2023. 11. 2.

문제.

https://www.acmicpc.net/problem/17298

 

17298번: 오큰수

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

www.acmicpc.net


코드.

n = int(input())
a = list(map(int,input().split()))
b = []

for i in range(n):
    if a[i] >= max(a[i:]):
        b.append(-1)
    else:
        num = 1
        while a[i] > a[i+num]:
            num +=1
        b.append(a[i+num])

for i in b:
    print(i,end=' ')
입력 값 출력 값
4

3 5 2 7
5 7 7 -1

해석 및 풀이.

★ 이 문제는 N개의 수를 무작위로 받아서 각각의 숫자마다 오른쪽에 있는 숫자중 본인보다 큰 수를 출력하는데 가장 가까운 위치에 있는 숫자를 없을경우 -1을 출력하는 프로그램을 만드는 문제입니다.

n = int(input())
a = list(map(int,input().split()))
b = []

먼저 범위에 해당하는 N을 받을 input() 함수와 무작위로 입력되는 숫자로 리스트로 받을 수 있게끔 해줍니다. 그리고  조건에 해당하는 숫자를 입력한 빈 리스트 b 를 만들어 줍니다.

for i in range(n):
    if a[i] >= max(a[i:]):
        b.append(-1)
    else:
        num = 1
        while a[i] > a[i+num]:
            num +=1
        b.append(a[i+num])

이후 입력된 범위만큼 반복문을 돌려주고 조건문으로 문제에 해당하는 숫자를 찾아줍니다. 먼저 본인이 오른쪽에 있는 숫자중에 가장 크다는 조건을 넣어주고 그랬을때 -1을 리스트 b 에 넣어줍니다. 만약 작을경우 한칸씩 옆으로 이동 시켜주는데 가장 가까운 위치에 있는 큰수를 찾아주기 위해 조건에 도달 할때까지 반복문을 돌려줍니다. 그리고 찾았을 경우 그 인덱스에 수를 리스트 b 에 넣어줍니다.

for i in b:
    print(i,end=' ')

이후 리스트 b 에 입력된 값을 반복문을 이용하여 print로 가로로 나열해서 출력해줍니다.