촬리의늘솔길

[프로그래머스] 정렬 : 가장큰수 / H-index (부제 : 삽질일기) 본문

✍️2023/Algorithm

[프로그래머스] 정렬 : 가장큰수 / H-index (부제 : 삽질일기)

리촬리 2023. 10. 19. 18:29

가장 큰 수

 

https://school.programmers.co.kr/learn/courses/30/lessons/42746

[프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr](https://school.programmers.co.kr/learn/courses/30/lessons/42746)

문제 설명

- Input

0 또는 양의 정수가 담긴 배열 numbers

- Output

순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열

- Constraints

numbers의 길이는 1 이상 100,000 이하입니다.

numbers의 원소는 0 이상 1,000 이하입니다.

정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

알고리즘

sort …

코드

이거 다 쪼개는게 아니라 그 수 그 자체를 가지고 하는거였음 ;;

def solution(numbers):
    arr =[]
    for i in range(len(numbers)):
        n = numbers[i]
        if n >= 10:
            num = list(map(int,str(n)))
            arr.extend(num)
        else:
            arr.append(n)
    arr.sort(reverse=True)
    answer = "".join(map(str,arr))
    return answer

테스트 케이스 1은 성공했는데 2는 성공하지 못했다

왜지?

문제를 잘못이해한건가?

9543330 > 9534330

누가봐도 전자가 크지않나..?

어쨌든 실패한 코드..ㅋ

가장 좋아요를 많이 받은코드

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))

설명

이번에도 풀었던..흔적

약간 생각을 100중에 20까지밖에 못하는 것같다는 생각이..든다..

[

[프로그래머스] 가장 큰 수(python)

문제 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한조건 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 입출력 예 풀이 이 문제는 0 또는 양의 정수가 주어졌을 때..

](https://liveloper-jay.tistory.com/138)

https://liveloper-jay.tistory.com/138

리스트 병합

리스트와 리스트를 병합할 때는 extend 메서드를 사용합니다.

list.extend(iterable)

파이썬 오름차순, 내림차순 정렬

리스트.sort() 함수에는 reverse 옵션(매개변수)이 존재합니다.

디폴트는 리스트.sort(reverse=False) 인 게 디폴트여서 리스트가 오름차순으로 정렬이 되는 것이고

리스트.sort(reverse=True)로 변경하면 리스트가 내림차순으로 정렬이 됩니다.

Map

실수로 이루어진 a 리스트의 모든 요소를 정수로 변환하는 식 (map 사용)

a = [1.2, 1.3, 1.5, 1.7]

a = list(map(int,a))

print(a)

[1, 1, 1, 1]

어려웠던 점

이런거 시간복잡도는 어떻게 생각해요?

알고리즘 풀면서 어떤 자료구조가 필요하겠다 접목이 바로바로 되나요?


H-index

문제 설명

  • Input
  • 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index
  • Output
  • 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution
  • Constraints
    • 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
    • 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
  • Edge cases

알고리즘

  • 정렬

코드

def solution(citations):
    citations.sort(reverse = True)

    for i in range(len(citations)):
        if i >= citations[i]:
            return i

테스트 9 가 실패했다 이유가 뭐지

설명

다른사람 풀이

  • 역순으로 뒤집어서 citations[i]와 i를 비교해서 작은 값을 선택
defsolution(citations):
    citations.sort(reverse=True)
    answer = max(map(min, enumerate(citations, start=1)))
return answer

Enumerate()에는 두가지 매개변수가 있습니다.

  • Iterable : 반복할 수 있는 개체입니다.
  • StartIndex : (선택 사항) 개수는 루프의 첫 번째 항목에 대해 startIndex에 제공된 값으로 시작하고 루프의 끝에 도달할 때까지 다음 항목에 대해 증가합니다.지정하지 않으면 카운트는 0부터 시작 됩니다.

어려웠던 점

  • 문제 이해가 어려웠다. 중간에 아예 잘못 이해해서 리스트의 인자가 다른 값에 포함되는 여부를 따지는줄 알았다.
728x90

'✍️2023 > Algorithm' 카테고리의 다른 글

[프로그래머스] BFS/DFS 2문제  (1) 2023.10.19
[프로그래머스] BFS/DFS 3문제  (1) 2023.10.19
[프로그래머스] - 정렬 : K번째 수  (0) 2023.09.13
[이코테] DFS/BFS  (0) 2023.07.05
[BOJ/1244] 구현 문제  (0) 2023.04.26