몸과 마음이 건전한 SW 개발자

백준 SILVER 3 [2236번] 칩 만들기 {언어 : Python} 본문

알고리즘

백준 SILVER 3 [2236번] 칩 만들기 {언어 : Python}

스위태니 2024. 2. 29. 20:42

문제 링크

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

 

2236번: 칩 만들기

당신은 칩을 만들기 위해 기판에 N개의 부품을 장착했다. 각각의 부품을 작동시키기 위해서는 전원을 연결해야 하는데, 기판에 연결할 수 있는 전원 선이 K개 밖에 없었다. 당신은 이 K개의 전원

www.acmicpc.net

정답 코드

import sys
from collections import deque
input = sys.stdin.readline

N, K = map(int, input().split())
arr = list(map(int, input().split()))
sortedArr = []
for idx in range(N):
    sortedArr.append((arr[idx], idx))
sortedArr = sorted(sortedArr, key=lambda x: (x[0], x[1]))
result = [0 for _ in range(N)]
resultIndexes = []
q = deque()
while sortedArr:
    if len(resultIndexes) == K:
        break
    q.append(sortedArr.pop())
    current = q[0]
    result[current[1]] = current[1] + 1
    resultIndexes.append(current[1]+1)
    q.popleft()

sortedResultIndexes = sorted(resultIndexes)
for sri in sortedResultIndexes:
    print(sri)
for _ in range(K-N):
    print(0)
for r in result:
    print(r)

풀이 방법

  • 거창하게 생각해서 요리조리 풀었는데 결론은 정렬해서 가장 큰 값을 하나씩 추가하는 것.
  • 전원과 연결되지 않은 부분에 0 출력인가 그래서 마지막부분에 K-N만큼 0을 출력한다.
    • 이 부분 안하면 틀림

느낀점

  • 이상한 문제다.
  • 정렬을 하고 출력하든 안하고 출력하든 둘 다 맞는다.
  • 예시의 답과 달라도 정답이다.
  • 더 간단하게 풀 수도 있는데 바꾸기 귀찮다.