MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋‘ ํ ํ•ฉ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/programmers

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋‘ ํ ํ•ฉ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๊ธฐ

MUKER 2023. 5. 24. 22:45
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


์„ฑ๊ณต ํ’€์ด

class Queue {
  private var new: [Int] = []
  private var old: [Int]
  var queue: [Int] { old.reversed()+new }
  
  init(_ input: [Int] ) { old = input.reversed() }
  
  func add(_ n: Int) {
    new.append(n)
  }
  
  func removeFirst() -> Int {
    guard !old.isEmpty || !new.isEmpty else { return 0 }
    if old.isEmpty {
      old = new.reversed()
      new.removeAll()
    }
    return old.removeLast()
  }
}

func solution(_ queue1:[Int], _ queue2:[Int]) -> Int {
  var q1 = Queue(queue1)
  var q2 = Queue(queue2)
  var sum1 = queue1.reduce(0,+)
  var sum2 = queue2.reduce(0,+)
  let goal = (sum1+sum2)/2
  var count = 0
  var result = -1
  
  while count < queue1.count*3 {
    if sum1 == sum2 { result = count; break }
    if sum1 > sum2 {
      let n = q1.removeFirst()
      if n == 0 { break }
      q2.add(n)
      sum2 += n
      sum1 -= n
    } else {
      let n = q2.removeFirst()
      if n == 0 { break }
      q1.add(n)
      sum1 += n
      sum2 -= n
    }
    count += 1
  }
  return result
}

ํ’€์ด ํ‚ค์›Œ๋“œ

- ํˆฌํฌ์ธํ„ฐ๋กœ ๋ฐฐ์—ด์˜ index๋ฅผ ๊ธฐ์–ตํ•ด๊ฐ€๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ํ•˜์ง€๋งŒ queue๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด ํ’€์–ด๋ณด๊ณ  ์‹ถ์–ด์„œ ํ’€์ด ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ๋งŒ queue๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.
- ํ’€์ด์˜ ํ•ต์‹ฌ์€ queue1์˜ ํ•ฉ์ด ํด ๋•Œ๋Š” queue1์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ queue2๋กœ ๋ณด๋‚ด๊ณ 
queue2์˜ ํ•ฉ์ด ํด ๋•Œ๋ฉด queue1๋กœ ๋ณด๋‚ด๋ฉด ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.