티스토리 뷰

문제

 

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

 

프로그래머스

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

programmers.co.kr

 

 

풀이

 

swift에는 Queue 자료구조가 없고, 이용하기 위해서는 직접 만들어야한다. 두 개의 배열을 이용해서 구현할 수도 있지만, 나는 큐에서 원소를 제거하지않고 포인터와 append만을 이용하였다.

 

일단 원소의 합이 더 큰 큐에서 원소를 옮겨야한다는 것은 당연하다. 그래서 합이 더 큰 큐의 앞 원소를 다른 큐에 append해주어야한다. 

예를 들어, 첫 번째 큐에서 두 번째 큐로 원소를 옮긴다고 가정해보자. firstP는 firstQ의 맨 앞 원소를 가리키고 있다. 맨 앞 원소를 빼게 되면 firstP를 1 증가시켜주기만 하면 firstQ[firstP]는 맨 앞 원소를 가리키는 것과 동일하다. 원소를 뺏으므로 첫번째 큐의 원소합을 나타내는 first변수에서 값을 빼준다.

위에서 했던 것들을 마찬가지로 second에 반대로 적용해준다. firstQ에서 뺀 값을 secondQ에 append해주고, second 변수에 그 값만큼 더해주기만 하면된다. 

 

이렇게 하다가 first의 값과 second의 값이 같다면 그때의 count값을 반환해주면된다.

 

이때, 생각해야할 점이 두 가지 있는데 먼저 두 개의 큐의 포인터가 처음 queue1과 queue2의 count보다 커진다면 두 큐가 서로 바뀌었다는 얘기이다. 그렇기때문에 break를 통해 -1을 반환해준다.

다음으로, 합이 더 큰 큐에서 작은 큐로 원소를 옮겼는데 옮긴 큐의 원소가 0이 된다면 두 큐는 같아질 수 없는 것이기 때문에 마찬가지로 break를 걸어주었다. 

import Foundation

func solution(_ queue1:[Int], _ queue2:[Int]) -> Int {
    
    var first = queue1.reduce(0) { $0 + $1 }
    var second = queue2.reduce(0) { $0 + $1 }
    var firstP = 0
    var secondP = 0
    var count = 0
    var firstQ = queue1
    var secondQ = queue2
    
    while true {
        if first == second {
            return count
        }
        if firstP >= queue1.count && secondP >= queue2.count {
            break
        }
        if firstP == firstQ.count || secondP == secondQ.count {
            break
        }
        if first < second {
            let sFirst = secondQ[secondP]
            firstQ.append(sFirst)
            first += sFirst
            second -= sFirst
            secondP += 1
        } else {
            let fFirst = firstQ[firstP]
            secondQ.append(fFirst)
            second += fFirst
            first -= fFirst
            firstP += 1
        }
        count += 1
    }
    return -1
}

 

 

_____________________________________________________________________________________________________

 

 

카카오 2단계는 뭔가 다른 2단계보다 어려운느낌

댓글
최근에 올라온 글
Total
Today
Yesterday