일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- C
- PHP
- 파일 시스템
- 시간복잡도
- level13
- SWiFT
- ftz level13
- pwnable.kr
- 암호수학
- 파이썬
- 스택
- OSI
- Stack
- Java
- ftz
- War Game
- LoB
- 미로 탐색 알고리즘
- HTML
- windosw 문자열
- 재귀
- windosws wbcs
- web
- 두근두근 자료구조
- System
- 자료구조
- 정렬 알고리즘
- 큐
- 백준
- c언어
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 프로그래머스 코딩테스트 연습>2022 KAKAO TECH INTERNSHIP > 두 큐 합 같게 만들기 본문
Programming/Algorithm & Data Structure
[Swift] 프로그래머스 코딩테스트 연습>2022 KAKAO TECH INTERNSHIP > 두 큐 합 같게 만들기
guswlsdk 2023. 3. 20. 21:35반응형
시간 초과 문제를 해결하기 위해 고민을 많이 했다.
- queue의 합을 구하기 위해 reduce나 반복문을 사용하면 queue의 길이만큼 연산하게 되니O(n), 처음 queue의 합을 구하고 합에서 요소만큼 더하기 빼기 연산으로 하면 O(1)
- queue를 쓰게 되면 removeFirst(), append() 연산 할 때마다 시간 복잡도가 증가함O(n) -> queue 두 개를 합쳐서 dequeue 사용O(1)
import Foundation
func solution(_ queue1:[Int], _ queue2:[Int]) -> Int {
var result = 0
var sumQ1 = 0
var sumQ2 = 0
var dequeue = queue1 + queue2
var dequeuelen = dequeue.count
for i in 0..<queue1.count{
sumQ1 += queue1[i]
sumQ2 += queue2[i]
}
let halfNum = (sumQ1 + sumQ2) / 2
if (sumQ2+sumQ1) % 2 != 0{
return -1
}
var q1head = 0
var q2head = queue1.count
while result < queue1.count * 4{
if sumQ1 == halfNum, sumQ2 == halfNum{
return result
}
if sumQ1 > halfNum{
let e = dequeue[q1head]
sumQ1 -= e
sumQ2 += e
result += 1
q1head += 1
}
if sumQ2 > halfNum{
let e = dequeue[q2head]
sumQ2 -= e
sumQ1 += e
result += 1
q2head += 1
}
if q1head == dequeuelen{
q1head = 0
}
if q2head == dequeuelen{
q2head = 0
}
}
return -1
}
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[Swift] 백준 게임 1072 (0) | 2024.11.12 |
---|---|
[Swift] 프로그래머스 코딩테스트 연습 > 연습문제 > 인사고과 (0) | 2023.05.03 |
[Swift] 프로그래머스 코딩테스트 연습> 연습문제> 기사단원의 무기 (0) | 2023.01.05 |
[Swift] 프로그래머스 코딩테스트 연습> 연습문제 > 점 찍기 (0) | 2023.01.05 |
[Swift] 프로그래머스 코딩테스트 연습> 연습문제> 푸드 파이트 대회 (0) | 2023.01.04 |