코딩테스트 (Coding Test)

[프로그래머스] Lv1 문제풀이

zzoming 2023. 10. 9. 22:26

1. 문제 

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

 

프로그래머스

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

programmers.co.kr

 

💡이해 ⇒ 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 

 

 

프로그래머스

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

programmers.co.kr

 

 

💡이해 ⇒ (빵 - 야채- 고기 - 빵)로 샇인 햄버거만을 포장. 만일 [야채, , 빵 , 야채, 고기, 빵, 야채, 고기, 빵] 일 때는 총 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

 

프로그래머스

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

programmers.co.kr

 

💡이해 ⇒ 사과는 상태에 따라 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

 

프로그래머스

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

programmers.co.kr

 

💡이해 ⇒

[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

 

프로그래머스

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

programmers.co.kr

 

💡이해 ⇒  주어진 리스트에서 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')]