728x90
https://school.programmers.co.kr/learn/courses/30/lessons/118667
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
1. 전체 이동하는 횟수(limit) 를 구한다.
1-1. 3번 예시를 이용하면 4 * (queue1 의 개수) 로 전체 이동이 되고 원래자리로 돌아오는 것을 알 수 있다.
2. limit 크기 동안 탐색 한다.
3. queue.sum() 을 이용하면 시간 초과가 발생하기 때문에 입력을 각 queue 에 저장 시 sum1, sum2 도 같이 저장한다.
4. queue add/pop 수행 시 sum1, sum2 를 계산한다.
5. 마지막으로 두 큐가 처음부터 합이 같은 경우를 탐색하기 전 찾는다.
코드
import java.util.*
class Solution {
fun solution(queue1: IntArray, queue2: IntArray): Int {
var answer: Int = 0
val q1 = LinkedList<Long>()
val q2 = LinkedList<Long>()
var sum1 = 0L
var sum2 = 0L
var sum = 0L
queue1.forEach { queue ->
q1.add(queue.toLong())
sum1 +=queue
}
queue2.forEach { queue ->
q2.add(queue.toLong())
sum2 +=queue
}
sum = (sum1 + sum2) / 2
var limit = 4 * q1.size
while (limit != 0) {
if (sum1 == sum2) break
if (sum1 > sum2) {
val num = q1.pop()
q2.add(num)
sum2 += num
sum1 -= num
} else {
val num = q2.pop()
q1.add(num)
sum1 += num
sum2 -= num
}
answer++
limit--
}
if (sum1 != sum2) answer = -1
return answer
}
}
728x90
'알고리즘(w.KOTLIN) > 자료구조' 카테고리의 다른 글
[프로그래머스][Level1][178871] 달리기 경주 (0) | 2023.06.22 |
---|---|
[백준][KOTLIN][1406] 에디터 (0) | 2023.01.02 |
[알고리즘][KOTLIN] 택배상자 (0) | 2022.12.03 |
[알고리즘][KOTLIN] 롤케이크 자르기 (1) | 2022.12.03 |