9/27 Coding Test

김태준·2023년 9월 27일
0

Coding Test - Programmers

목록 보기
29/29
post-thumbnail

금일 서류 발표가 3곳에서 나왔고 모두 합격했다.
기회를 살려 도약할 수 있길. 화이팅하자!!!!!!!!

✅ Programmers - LV 2

🎈 귤고르기

수확한 귤 중 K개를 골라 상자 하나에 담아 판매하고자 한다. 그러나 귤들의 크기가 일정하지 않아 미관상 보기 좋지 않았고 이에 귤을 크기별로 분류했을때 서로 다른 종류의 수를 최소화하고자 한다. 귤을 8개 수확했고 크기가 [1,3,2,5,4,5,2,3]일 때, 6개를 판매하고자 한다면 1, 4를 제외한 2,3,5 크기만을 가지고 서로 다른 종류가 최소일 때가 된다.
최종적으로 귤 개수 k와 크기를 담은 배열 Tangerine이 주어질 때, 크기가 서로 다른 종류의 수의 최솟값을 리턴하는 함수를 만드는 문제.

from collections import Counter
def solution(k, tangerine):
    answer = 0
    size = sorted(Counter(tangerine).values(), reverse = True)
    for i in size:
        if k <= 0:
            break
        k -= i
        answer += 1
    return answer

< 풀이 과정 >

  1. tangerine 배열 내 숫자들은 귤의 크기를 의미하므로 귤의 크기의 개수가 중요하기에 dic형태의 Counter 라이브러리를 활용하여 value들을 size 리스트로 저장해준다.
  2. 귤 크기의 서로 다른 종류 수를 최소화해야 하기 때문에 size 리스트를 내림차순하여 앞 인덱스 번호부터 처리하기 편하게 한다.
  3. for문으로 size 리스트의 앞 번호부터 빼면서 k가 0 아래로 내려가면 중단하고 answer를 1만큼 추가해준다.

🎈 할인행사

XYZ 마트는 일정 금액을 지불하면 10일 간 회원 자격을 부여한다. 유저가 자신이 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치한 경우에 맞춰서 회원가입을 하고자 한다.
원하는 제품 배열을 want, 제품 수량을 나타내는 배열 number, 할인 제품을 나타내는 배열 discount가 주어질 때, 회원등록시 유저가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return하는 솔루션 함수를 완성하기. 가능한 날이 없으면 0을 리턴

def solution(want, number, discount):
    answer = 0
    hash = dict()
    for i in range(len(want)):
        hash[want[i]] = number[i]
    for i in range(len(discount)):
        dc_list = discount[i:i+10]
        cnt = 0
        for w in want:
            if hash[w] == dc_list.count(w):
                cnt += 1
            if cnt == len(want):
                answer += 1
    return answer

< 풀이 과정 >
주어진 문제를 그대로 구현하면 해결되는 문제.
1. 우선 want 리스트와 number 리스트를 dict형태로 구성해준다.
2. for문으로 discount 배열을 탐색하며 10일 간 할인 품목 리스트를 구성해주고 제품 수량과 할인 품목 내 수량이 일치하는지 여부를 확인하며 일치하는 경우 cnt 변수 값을 1씩 늘린다.
3. cnt 값과 want 배열 내 품목 개수가 일치하면, 10일 간 원하는 제품 품목을 모두 할인 받을 수 있는 것을 의미하므로 answer를 1 늘려준다.

profile
To be a DataScientist

0개의 댓글