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

 

프로그래머스

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

programmers.co.kr


내 풀이

 

from collections import deque

def solution(queue1, queue2):
    q1 = deque(queue1)
    q2 = deque(queue2)
    sumq1= sum(q1)
    target = (sum(q1) + sum(q2)) /2
    count=0
    
    while q1 and q2:
        if sumq1 == target:  
            return count
        elif sumq1 > target:  
            sumq1 -= q1.popleft()
        else:  
            q1.append(q2.popleft())
            sumq1 += q1[-1]
            
        count += 1

    return -1

deque를 이용한 평범한 풀이다. 

최초에는 sumq를 이용하지 않고 매번 sum을 구해줘서 했는데 그러니까 시간초과가 나더라.

그래서 따로 구해주고 +-만 해줬다.

다른 풀이를 보니까 q1 q2 둘다 append pop해줬던데 그럴필요없이 비교할 하나만 정해서

비교군이 타겟보다 크면 비교군에만 빼주고 다른 한쪽은 가만히 두는게 더 나은거 같다.

 


다른사람의 풀이

from collections import deque

def solution(queue1, queue2):
    qu_1 = deque(queue1)
    qu_2 = deque(queue2)
    sum_1 = sum(qu_1)
    sum_2 = sum(qu_2)

    for i in range(len(queue1) * 3):
        if sum_1 == sum_2:
            return i
        if sum_1 > sum_2:
            num = qu_1.popleft()
            qu_2.append(num)
            sum_1 -= num
            sum_2 += num
        else:
            num = qu_2.popleft()
            qu_1.append(num)
            sum_2 -= num
            sum_1 += num
    return -1

 


https://dev-dain.tistory.com/228

 

[Python3] 프로그래머스 lv2. 118667 두 큐 합 같게 만들기

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

dev-dain.tistory.com


최초에 코테칠때 이 두문제 풀고나니 시간을 다써서 아무것도 못했었던 기억이난다..

발전을 하긴하는거같다 이 두문제 풀고나니까 동기부여를 조금 받은거 같다

이 두문제처럼 아주 어려운 문제들도 나중에 보면 그땐 그랬지 할 수 있었으면 한다.

'취준 > 프로그래머스' 카테고리의 다른 글

주차 요금 계산 - 파이썬  (0) 2022.09.09
캐시 - 파이썬  (0) 2022.09.08
성격 유형 검사하기 - 파이썬  (0) 2022.08.31
배달 - 파이썬  (0) 2022.07.27
괄호 회전하기 - 파이썬  (0) 2022.07.25

https://school.programmers.co.kr/learn/courses/30/lessons/118666?language=python3 

 

프로그래머스

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

programmers.co.kr


내 풀이

 

#1번 라이언(R),튜브(T)
#2번 콘(C),프로도(F)
#3번 제이지(J),무지(M)
#4번 어피치(A),네오(N)

from collections import defaultdict

def solution(survey, choices):
    answer=''
    candi = defaultdict(int)
    
    for s,c in zip(survey,choices):
        if c<4:
            candi[s[0]] +=(4-c)
        elif c>4:
            candi[s[1]] +=c-4
    print(candi)
    
    answer +='R' if candi['R'] >= candi['T'] else 'T'
    answer +='C' if candi['C'] >= candi['F'] else 'F'
    answer +='J' if candi['J'] >= candi['M'] else 'M'
    answer +='A' if candi['A'] >= candi['N'] else 'N'
    
    
    return answer

defaultdict를 이용한 풀이다.

아니면 set에다 기본 값 주고 시작해도 될듯.

 


다른사람의 풀이

 

from collections import defaultdict

def solution(survey, choices):
    indicator = [('R', 'T'), ('C', 'F'), ('J', 'M'), ('A', 'N')]
    answer = ''
    personality = defaultdict(int)
    for s, c in zip(survey, choices):
        if c < 4:
            personality[s[0]] += (4 - c)
        elif c > 4:
            personality[s[1]] += (c - 4)
    for i in indicator:
        if personality[i[0]] >= personality[i[1]]:
            answer += i[0]
        else:
            answer += i[1]
    return answer


사실 이 문제 코테를 처음 준비하기 시작했을 때 무턱대고 지원했던 카카오 인턴 1차 문제에서 어렵게 풀었었던 기억이있다.

그때 이 문제푸는데 2시간 걸렸었는데 참 시간이 많이 지났음을 느낀다..

'취준 > 프로그래머스' 카테고리의 다른 글

캐시 - 파이썬  (0) 2022.09.08
두 큐 합 같게 만들기 - 파이썬  (0) 2022.08.31
배달 - 파이썬  (0) 2022.07.27
괄호 회전하기 - 파이썬  (0) 2022.07.25
게임 맵 최단거리 - 파이썬  (0) 2022.07.05

+ Recent posts