Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 삼성 SDS
- 팀 분석
- 삼성 SDS Brigthics
- 추천시스템
- Brigthics를 이용한 분석
- 포스코 청년
- 직원 이직여부
- 삼성SDS
- 캐글
- 개인 의료비 예측
- 직원 이직률
- 혼공학습단
- Brigthics
- 혼공머신
- 브라이틱스 서포터즈
- 모델링
- 브라이틱스
- 혼공머신러닝딥러닝
- 삼성SDS Brigthics
- 데이터 분석
- 데이터분석
- Brightics
- Brightics를 이용한 분석
- 혼공
- 포스코 아카데미
- 노코드AI
- Brigthics Studio
- 영상제작기
- Brightics Studio
- 삼성SDS Brightics
Archives
- Today
- Total
데이터사이언스 기록기📚
[프로그래머스/Python] Level 2_두 큐 합 같게 만들기(2022 KAKAO TECH INTERNSHIP) 본문
Coding Test/프로그래머스(Python)
[프로그래머스/Python] Level 2_두 큐 합 같게 만들기(2022 KAKAO TECH INTERNSHIP)
syunze 2023. 6. 8. 15:31📌문제 유형
2022 KAKAO TECH INTERNSHIP (구현)
📌문제
📌나의 문제풀이
- queue1에서 꺼낸 것 q1_sum에서 빼고, queue2에 넣은 것 q2_sum에 더하기
- queue1, queue2 변동 될 때마다 sum(queue1), sum(queue2) 비교하면 시간복잡도 O(n)으로 시간초과 남
- q1_sum, q2_sum을 이용하여 값만 더하고 빼면 시간복잡도 O(1)
from collections import deque
def queue_pop(queue1, queue2, q1_sum, q2_sum):
num = queue1.popleft()
queue2.append(num)
q2_sum += num
q1_sum -= num
return q1_sum, q2_sum
def solution(queue1, queue2):
answer = 0
ans_sum = (sum(queue1) + sum(queue2)) // 2
q1_sum, q2_sum = sum(queue1), sum(queue2)
queue1 = deque(queue1)
queue2 = deque(queue2)
len_ = len(queue1)
while (answer <= 600000):
if q2_sum == ans_sum:
break
if len(queue1) == 0 or len(queue2) == 0 or answer == 600000:
answer = -1
break
if q1_sum > q2_sum:
q1_sum, q2_sum = queue_pop(queue1, queue2, q1_sum, q2_sum)
elif q1_sum < q2_sum:
q2_sum, q1_sum = queue_pop(queue2, queue1, q2_sum, q1_sum)
answer += 1
return answer
📌다른 사람의 문제풀이
- 유사한 풀이
from collections import deque
def solution(queue1, queue2):
answer = 0
mid = (sum(queue1) + sum(queue2)) // 2
leftSum = sum(queue1)
queue1 = deque(queue1)
queue2 = deque(queue2)
while queue1 and queue2:
if leftSum > mid:
tmp = queue1.popleft()
leftSum -= tmp
elif leftSum < mid:
tmp = queue2.popleft()
leftSum += tmp
queue1.append(tmp)
else:
return answer
answer += 1
return -1
📌리뷰
- while 값 제한할 때, answer이 600000 이하인 걸로 제한
- queue1 + queue2의 최대 길이가 600000이기 때문
- sum(queue1)의 시간복잡도는 O(N)이므로 q1_sum, q2_sum으로 숫자 빼기
- Python은 int 길이 초과해도 알아서 long형으로 바뀜! 그래서 오버플로우 가능성 고려하지 않아도 됨
- 문제 조건 잘 읽기
- 시간 초과 나면 시간 복잡도 확인하기...😥
728x90
'Coding Test > 프로그래머스(Python)' 카테고리의 다른 글
[프로그래머스/Python] Level 2_[3차]방금그곡 (2018 KAKAO BLIND RECRUITMENT) (0) | 2023.08.14 |
---|---|
[프로그래머스/Python] Level 2_메뉴 리뉴얼(2021 KAKAO BLIND RECRUITMENT) (0) | 2023.06.09 |
[프로그래머스/Python] Level 2_방문길이(Summer/Winter Coding(~2018)) (0) | 2023.05.17 |
[프로그래머스/Python] Level 2_[3차] 파일명 정렬(2018 KAKAO BLIND RECRUITMENT) (0) | 2023.05.17 |
[프로그래머스/Python] Level 2_게임 맵 최단거리(DFS/BFS) (0) | 2023.05.16 |
Comments