1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/134240
💡이해 ⇒ food = [1,3,4,6] 일 경우 1칼로리 음식이 3개, 2칼로리 음식이 4개, 3칼로리 음식이 6개 이므로 1223330333221 로 결과가 나타나야 한다.
- 양쪽에 배열되므로 2로 나눈 몫만큼 음식을 배열하기
- 중간에 0(물)을 추가하고, 나머지는 reverse해서 붙여주기
def solution(food) :
temp = ''
for i in range(1,len(food)) :
temp += str(i)*(food[i] //2)
return temp + '0' + temp[::-1]
문제2. 햄버거 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/133502
💡이해 ⇒ (빵 - 야채- 고기 - 빵)로 샇인 햄버거만을 포장. 만일 [야채, 빵, 빵 , 야채, 고기, 빵, 야채, 고기, 빵] 일 때는 총 2개의 햄버거를 생성할 수 있다.
- 새로운 리스트에 주어진 재료를 하나씩 추가하면서 4번째 전 원소부터 현재원소까지 빵 , 야채, 고기, 빵 구조를 이루면 cnt + 1 하면서 결과 출력 후 리스트에서 삭제
🤔 list = [1,2,3,4,5] 일 때 list[-4:-2] 의 결과는 뒤에서부터 4번째~2번째 원소이므로 [2,3,4]이다.
def solution(ingredient) :
burger = []
cnt = 0
for i in ingredient :
burger.append(i)
if burger[-4:] == [1,2,3,1] :
cnt += 1
del burger[-4:]
return(cnt)
문제3.과일장수
https://school.programmers.co.kr/learn/courses/30/lessons/135808
💡이해 ⇒ 사과는 상태에 따라 1점부터 k점, 한 상자에 사과를 m개씩 담아 포장 , 상자에 담긴 사과 중 가장 낮은 점수가 p점인 경우, 사과 한 상자의 가격은 p*m이다. 이 떄 과일장수가 얻을 수 있는 최대 이익 구하기
🤔 최대이익을 얻으려면 , score을 내림차순으로 정렬 후 m만큼 포장하면 최대 이익을 낼 수 있겠다..!!
def solution(k, m, score):
#내림차순으로 정렬
score = sorted(score,reverse = True)
result = []
price = 0
for i in score :
result.append(i)
if len(result) == m :
price += min(result) * m
#result의 모든 원소 삭제
result.clear()
return price
문제4. 포켓몬
https://school.programmers.co.kr/learn/courses/30/lessons/1845
💡이해 ⇒
[3,1,2,3] 일 경우 가져갈 수 있는 포켓몬의 최대 개수 2개 ⇒ [1,3],[2,3],[1,2] 최대로 고를 수 있는 포켓몬의 종류 2개
[3,3,3,2,2,2] 일 경우 가져갈 수 있는 포켓몬의 최대 개수 3개 ⇒ [3,3,2],[2,2,3] 최대로 고를 수 있는 포켓몬의 종류 2개
🤔 가져갈 수 있는 포켓몬의 수와 중복을 제거한 포켓몬의 종류 중 더 작은 것을 선택
def solution(nums):
choice = int(len(nums) // 2)
nums = set(nums) #중복제거
answer = min(len(nums) , choice)
return answer
문제5. 삼총사
https://school.programmers.co.kr/learn/courses/30/lessons/131705
💡이해 ⇒ 주어진 리스트에서 3개를 골라 합이 0이 되는 경우의 수 구하기
🤔 for문을 3번을 돌려서 합이 0이 되는 경우의 수를 찾아내는 코드를 작성
다만, 풀이에서 combinations 라이브러리를 이용하면 더 짧게 사용할 수 있다. 이 김에 순열과 조합 라이브러리를 기억하기
내 풀이
def solution(number):
#만일 3개의 숫자를 모두 더했을때 0이면 삼총사
result = []
n = len(number)
for i in range(n) :
for j in range(i+1 , n) :
for k in range(j+1 , n) :
num1,num2,num3 = number[i],number[j],number[k]
result.append(sum([num1,num2,num3]))
return result.count(0)
combinations를 이용한 풀이
def solution(number) :
from itertools import combinations
cnt = 0
for i in combinations(number,3) :
if sum(i) == 0 :
cnt += 1
return cnt
순열 (permutations)
arr = ['A', 'B', 'C']
per = itertools.permutations(arr, 2)
print(per)
#실행결과
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
조합 (combinations)
arr = ['A', 'B', 'C']
comb = itertools.combinations(arr, 2)
print(comb)
#결과
[('A', 'B'), ('A', 'C'), ('B', 'C')]
'코딩테스트 (Coding Test)' 카테고리의 다른 글
[LeetCode] - 세 수의 합 (0) | 2023.11.14 |
---|---|
[LeetCode] - 두 수의 합 (0) | 2023.11.14 |
[프로그래머스] Lv1 문제풀이 (0) | 2023.10.09 |
[백준] 1937번 욕심쟁이판다 - 파이썬 (0) | 2023.10.06 |
[백준] 10815번 숫자카드 - 파이썬 (0) | 2023.10.06 |