코딩테스트

하루 코테 3개 풀기 - 8일차

songsua 2024. 12. 17. 15:52

1. 의상문제(프로그래머스)
https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

def solution(clothes):
    closet = {}
   
    # 의상을 종류별로 분류
    for item, category in clothes:
        if category in closet:
            closet[category] += [item]
        else:
            closet[category] = [item]
    
    # 경우의 수 계산
    answer = 1
    for category in closet:
        answer *= (len(closet[category]) + 1)  # 각 종류별 의상 개수 + 1 (입지 않는 경우)

    answer -= 1  # 아무 의상도 입지 않는 경우를 제외

    
    print("경우의 수:", answer)  
    return answer

# 입력값
clothes = [
    ["yellow_hat", "headgear"], 
    ["blue_sunglasses", "eyewear"], 
    ["green_turban", "headgear"]
]

# 함수 호출
solution(clothes)

 

 

2. 병합 정렬

array_a = [1, 2, 3, 5]
array_b = [4, 6, 7, 8]


def merge(array1, array2):
    # 이 부분을 채워보세요!
    return


print(merge(array_a, array_b))  # [1, 2, 3, 4, 5, 6, 7, 8] 가 되어야 합니다!

print("정답 = [-7, -1, 5, 6, 9, 10, 11, 40] / 현재 풀이 값 = ", merge([-7, -1, 9, 40], [5, 6, 10, 11]))
print("정답 = [-1, 2, 3, 5, 10, 40, 78, 100] / 현재 풀이 값 = ", merge([-1,2,3,5,40], [10,78,100]))
print("정답 = [-1, -1, 0, 1, 6, 9, 10] / 현재 풀이 값 = ", merge([-1,-1,0], [1, 6, 9, 10]))

 

오답

def merge(array1, array2):
    array_c = []
    i, j = 0, 0 
    for i in range(len(array_b)) :
        for j in range(i) :
            if array_a[i] < array_b[j] :
                array_c.append(array_a[i])
                i += 1
            else :
                array_c.append(array_b[j])
                j += 1
            
    print(array_c)    
    # 이 부분을 채워보세요!
    return array_c
    print(array_c)

 

 

array_a = [1, 2, 3, 5]
array_b = [4, 6, 7, 8]


def merge(array1, array2):
    array_c = []
    i, j = 0, 0 
    
    while i < len(array1) and j < len(array2) :
        if array1[i] < array2[j] :
            array_c.append(array1[i]) 
            i += 1
        else :
            array_c.append(array2[j]) 
            j += 1
    return array_c
    
    
print("정답 = [-7, -1, 5, 6, 9, 10, 11, 40] / 현재 풀이 값 = ", merge([-7, -1, 9, 40], [5, 6, 10, 11]))
print("정답 = [-1, 2, 3, 5, 10, 40, 78, 100] / 현재 풀이 값 = ", merge([-1,2,3,5,40], [10,78,100]))
print("정답 = [-1, -1, 0, 1, 6, 9, 10] / 현재 풀이 값 = ", merge([-1,-1,0], [1, 6, 9, 10]))

여기 까지 작성할 경우

정답 = [-7, -1, 5, 6, 9, 10, 11, 40] / 현재 풀이 값 =  [-7, -1, 5, 6, 9, 10, 11]
정답 = [-1, 2, 3, 5, 10, 40, 78, 100] / 현재 풀이 값 =  [-1, 2, 3, 5, 10, 40]
정답 = [-1, -1, 0, 1, 6, 9, 10] / 현재 풀이 값 =  [-1, -1, 0]

 

길이 달라서 끝까지 안들어간다.

array_a = [1, 2, 3, 5]
array_b = [4, 6, 7, 8]


def merge(array1, array2):
    result = []
    array1_index = 0
    array2_index = 0

    while array1_index < len(array1) and array2_index < len(array2):
        if array1[array1_index] < array2[array2_index]:
            result.append(array1[array1_index])
            array1_index += 1
        else:
            result.append(array2[array2_index])
            array2_index += 1

    while array1_index < len(array1):
        result.append(array1[array1_index])
        array1_index += 1

    while array2_index < len(array2):
        result.append(array2[array2_index])
        array2_index += 1


print(merge(array_a, array_b))

print("정답 = [-7, -1, 5, 6, 9, 10, 11, 40] / 현재 풀이 값 = ", merge([-7, -1, 9, 40], [5, 6, 10, 11]))
print("정답 = [-1, 2, 3, 5, 10, 40, 78, 100] / 현재 풀이 값 = ", merge([-1,2,3,5,40], [10,78,100]))
print("정답 = [-1, -1, 0, 1, 6, 9, 10] / 현재 풀이 값 = ", merge([-1,-1,0], [1, 6, 9, 10]))

 

 

3. 스택 

push(data) : 맨 앞에 데이터 넣기

pop() : 맨 앞의 데이터 뽑기

peek() : 맨 앞의 데이터 보기

isEmpty() : 스택이 비었는지 안비엇는지 여부 반환해주기

stack = []            # 빈 스택 초기화
stack.append(4)       # 스택 push(4)
stack.append(3)       # 스택 push(3)
top = stack.pop()     # 스택 pop
print(top)            # 3!