# Coding/# 백준

[백준 / 1422] 숫자의 신 - Python

강현들 2021. 4. 2. 11:38
728x90
반응형

 

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

 

1422번: 숫자의 신

첫째 줄에 K와 N이 공백을 사이에 두고 주어진다. K와 N은 각각 1,000보다 작거나 같은 자연수이고, N은 K보다 크거나 같다. 둘째 줄에는 K개의 수가 한 줄에 하나씩 주어진다. 각 수는 1,000,000,000보

www.acmicpc.net

<접근>

수를 입력받아서 list에 저장한다. 리스트에 있던 기존의 수와 비교해서 앞에 넣을지 뒤에 넣을지 큰 수로 비교한다. 무조건 N개의 수들은 한 번씩 들어가야 하고, K번을 뽑아야 한다. 따라서 K가 더 큰 경우 반복되어야 할 수가 존재한다. 제일 큰 수를 반복하면 된다. 

 

  • 모든 수를 비교하여 앞에 넣을지 뒤에넣을지 판단
  • 숫자적으로 제일 큰 수를 반복한다.

<입력 및 선언>

K, N = map(int, input().split())

numList = []
maxNum = 0

for _ in range(K):
    input_num = input()
    
    if int(input_num) > int(maxNum):
    	maxNum = input_num

 

수의 개수 K와 뽑을 개수 N을 입력받는다.

 

숫자들을 담을 numList를 선언하고, 반복할 최대수인 maxNum을 0으로 설정한다.

 

K 만큼 수를 입력받을 거니 반복해준다. 만약 입력받은 수가 maxNum보다 크다면 더 큰 수이므로 maxNum을 갱신해준다.

<정렬>

	insertNum = False

    for i in range(len(numList)):
        temp1 = ''.join(numList[:i])+input_num+''.join(numList[i:])
        temp2 = ''.join(numList[:i+1])+input_num+''.join(numList[i+1:])
        if int(temp1) >= int(temp2):
            numList.insert(i, input_num)
            insertNum = True
            break

    if not insertNum:
        numList.append(input_num)

 

insertNum은 마지막까지 수가 삽입되지 않았을 때 끝에 넣어주기 위한 변수이다.

 

numList를 앞에서부터 차례대로 돌면서 더 큰 위치에 수를 삽입할 것이다.

temp1은 입력 받은 수를 차례대로 앞에 넣은 수이고, temp2는 입력받은 수를 하나 뒤에 넣은 수이다. 만약 temp1이 더 크다면 해당 넣은 위치에 해당 수를 삽입한다. 수가 삽입됐으므로 insertNum을 True로 바꿔주고 해당 for문의 반복을 멈춘다.

 

만약 마지막까지 삽입이 되지 않았다면 input_num은 작은 수이므로 맨 마지막에 수를 삽입해준다.

<출력>

answer = ''
for i in numList:
    if i == str(maxNum):
        answer += i*(N-K+1)
        maxNum = -1
    else:
        answer += i
print(int(answer))

 

정답을 담을 answer을 선언한다.

numList가 순서대로 정렬되어 있으므로 순서대로 answer에 담는다.

최대수를 반복해야 하므로 maxNum을 찾으면 N-K의 차이만큼 반복해준다. (원래 한번 넣어야 하므로 +1). 만약 최대수가 두 번 입력되면 해당 조건문에 두 번 들어가게 되므로 한번 설정한 이후에 maxNum을 -1로 바꾸어 준다.

 

<전체 코드>

K, N = map(int, input().split())

numList = []
maxNum = 0

for _ in range(K):
    input_num = input()

    if int(input_num) > int(maxNum):
        maxNum = input_num

    insertNum = False

    for i in range(len(numList)):
        temp1 = ''.join(numList[:i])+input_num+''.join(numList[i:])
        temp2 = ''.join(numList[:i+1])+input_num+''.join(numList[i+1:])
        if int(temp1) >= int(temp2):
            numList.insert(i, input_num)
            insertNum = True
            break

    if not insertNum:
        numList.append(input_num)

answer = ''
for i in numList:
    if i == str(maxNum):
        answer += i*(N-K+1)
        maxNum = -1
    else:
        answer += i
print(int(answer))
728x90
반응형