[프로그래머스] 성격 유형 검사

rhkr9080·2023년 11월 25일
0

프로그래머스

목록 보기
7/19

문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/118666

💻 문제 풀이 : Python

🤣오답
import copy

def getSum(array):
    sum = 0
    for i in array:
        sum = sum + i
    return sum

def solution(queue1, queue2):
    answer = 0  
    # 초기에 정답인지 확인하기
    if getSum(queue1) == getSum(queue2):
        answer = 0
        return answer
    # queue1와 queue2를 연결해서 myQ로 만듬.
    myQ = queue2 + queue1
    qLen = len(myQ)
    # myQ-myQ를 연결
    myQ = myQ + myQ
    # 합을 통해 목표로 만들어야 하는 targetSum 찾기    
    allSum = getSum(queue1) + getSum(queue2)
    targetSum = allSum / 2
    # 부분큐를 통해 부분합 구하기 -> 부분합이 targetSum이 되면 정답!
    partQ = copy.deepcopy(queue1)
    for i in myQ:
        # 부분큐의 길이가 qLen보다는 짧아야 함...!
        if len(partQ) > qLen:
            break
        if (getSum(partQ) < targetSum):
            partQ.append(i)
            answer += 1
        elif (getSum(partQ) > targetSum):
            partQ.pop(0)
            answer += 1
        else:
            break
        print(partQ)
    if (getSum(partQ) != targetSum):
        answer = -1
        
    return answer

😁 정답

import copy

def getSum(array):
    sum = 0
    for i in array:
        sum = sum + i
    return sum

def solution(queue1, queue2):
    answer = 0
    Sum1 = getSum(queue1)
    Sum2 = getSum(queue2)
    # 초기에 정답인지 확인하기
    if Sum1 == Sum2:
        answer = 0
        return answer
    # queue1와 queue2를 연결해서 myQ로 만듬.
    myQ = queue1 + queue2
    qLen = len(myQ)
    # myQ-myQ를 연결
    myQ = myQ + myQ
    # 합을 통해 목표로 만들어야 하는 targetSum 찾기    
    allSum = Sum1 + Sum2
    targetSum = (int)(allSum / 2)
    # 부분큐를 통해 부분합 구하기 -> 부분합이 targetSum이 되면 정답!
    i = (int)(qLen / 2) - 1
    pushIndex = (int)(qLen / 2)
    popIndex = 0
    while(i < len(myQ)):
        if (Sum1 < targetSum):
            Sum1 += myQ[pushIndex]
            pushIndex += 1
            answer += 1
        elif (Sum1 > targetSum):
            Sum1 -= myQ[popIndex]
            answer += 1
            popIndex += 1
        else:
            break
        i = i + 1
    if (Sum1 != targetSum):
        answer = -1
        
    return answer

📌 memo

  • 배열을 다루는 경우 append, pop 등을 최대한 사용하지 않아야함.
    => 이 문제의 경우 배열을 현재 상태를 직접 다루지 않고 합의 값으로만 상태를 다룸.
profile
공부방

0개의 댓글