[코딩테스트]모음사전/구명 보트

쟈니·2023년 5월 1일
0

프로그래머스 : 모음사전

from itertools import product

def solution(word):
    answer = 0
    arr = ['A', 'E', 'I', 'O', 'U']
    words = []
    
    for i in range(1, 6):
        for pr in product(arr, repeat = i):
            words.append(''.join(pr))   
    
    words.sort()
    return words.index(i) + 1

추천 많은 더 좋은 코드

from itertools import product

solution = lambda word: sorted(["".join(c) for i in range(5) for c in product("AEIOU", repeat=i+1)]).index(word) + 1

접근방식

![]

itertools의 product

product

  • 데카르트 곱을 표현할 때 사용하는 메소드이다.
  • DB의 join처럼 join 사용한다.
  • 2개 이상의 리스트의 모든 조합을 구할 때 사용한다.
  • generator이기 때문에 list에 꼭 저장해야 한다.

후기

완전탐색, 순열

  • 순열을 이용한 풀이(다섯개의 문자로 만들수 있는 최대 크기가 5인 문자들)
  • 계산이론 수업에서 비슷한 문제를 풀이했던 기억이 있어 금방 해결
  • 다른 사람 풀이는 그냥 만들 수 있는 모든 조합을 만들고 정렬 시켰다...(문자 크기가 5이기 때문에 가능한 풀이)

프로그래머스 : 구명 보트

def solution(people, limit):
    answer = 0
    people.sort()

    left = 0
    right = len(people)-1
    
    while left <= right:
        if people[left] + people[right] <= limit:
            left += 1
            right -= 1
        else:
            right -= 1
        
        answer += 1
    return answer

추천 많은 더 좋은 코드

def solution(people, limit) :
    answer = 0
    people.sort()

    a = 0
    b = len(people) - 1
    while a < b :
        if people[b] + people[a] <= limit :
            a += 1
            answer += 1
        b -= 1
    return len(people) - answer

접근방식

![]

후기

그리디, 포인터

  • 리스트 정렬하여 오른쪽 포인터(가장 큰)로 왼쪽 포인터(가장 작은)를 이동시켜 제한보다 작을 때 보트 수 ++1
  • 다른 사람 풀이는 짝 지었을때만 2명씩 나가니까 전체 인원에서 짝지은 수만 빼주면 보트의 수인 점을 이용하였는데 천재다...
profile
시작은 미미하나 끝은 쥬쥬하다.

0개의 댓글