| 문제

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내기

| 입력

numbers - 숫자 배열

| 출력

문자열로 return

| 예시

numbers return
[6, 10, 2] “6210”

| 발상

  • 0은 첫번째 오면 항상 작아지고 sort도 안되니까 continue로 패스
  • 큐를 써야하나?

| 풀이1 -> 런타임에러

from collections import deque
def solution(numbers):
  answer = ''

  visited = {}
  for i in range(len(numbers)):
    visited[numbers[i]] = False
  print(visited)
  
  queue = deque()
  for i in numbers:
    if i != 0:
      queue.append([0,i]) #일단 첫번째 숫자로 다 처넣고 0 6 10
  print("시작 : ", queue)

  while queue:
    #초기화
    for i in range(len(numbers)):
      visited[numbers[i]] = False
    
    temp = queue.popleft() #
    print('temp',temp)
    
    if temp[0] == len(numbers)-1: # 마무리
      break

    for i in range(1, len(temp)):#0 6 -> 0,6,10
      visited[temp[i]] = True
    print(visited)
    
    for i in numbers: # 6, 10, 2
      print(i)
      if not visited[i]: #i != temp[2]:
        print('걸림')
        queue.append(temp[:]) #그대로 복사 하되,
        queue[-1][0] += 1
        queue[-1].append(i)
      print(temp, queue)
    print('\n')
  
  #정리
  tmp =[]
  for i in queue:
    tmp.append(i[1:])
    
  print(tmp)
  result =[]
  for i in tmp:
    result.append(''.join(str(_) for _ in i))
  result2 =[]
  for i in result:
    result2.append(int(i))
  print(result2)
  print(max(result2))
  return str(max(result2))

solution([3, 30, 34, 5, 9])

| 풀이2

def solution(numbers):
  answer = ''
  temp = sorted(map(str, numbers),reverse =True)
  print(temp)
  
  for i in temp :
    answer += i
  return answer

solution([3, 30,300, 34, 5, 9])

| 소감 및 팁

  • 이런건 내가 뭘 할라하지말고 돌려봐서 젤 큰거 찾으면 됨
  • Max

댓글남기기