MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ฌธ์ž์—ด ์••์ถ• ๋ณธ๋ฌธ

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

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ฌธ์ž์—ด ์••์ถ•

MUKER 2023. 5. 25. 23:55
 

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

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

programmers.co.kr


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

func solution(_ s:String) -> Int {
  let sCount = s.count
  let arr = Array(s)
  var result = sCount
  
  // testcase 5๋ฒˆ์€ ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ 1 ์ด๋ผ ๋”ฐ๋กœ ๋นผ์คŒ
  if sCount == 1 { return 1 }
  
  // 1๋ถ€ํ„ฐ sCount์˜ ์ ˆ๋ฐ˜๋งŒํผ ๋ฐ˜๋ณต, i๋Š” ์ชผ๊ฐœ๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
  for i in 1...sCount/2 {
    
    // ๋ฌธ์ž์—ด ์ชผ๊ฐœ์„œ store์— ๋„ฃ๊ธฐ
    var store = [String]()
    for j in stride(from: 0, to: sCount, by: i) {
      if sCount-j < i { // ๋งˆ์ง€๋ง‰์ด ๋”๋Ÿฝ๊ฒŒ ๋‚จ๋Š” ๊ฒฝ์šฐ
        store.append(String(arr[j...]))
      } else {
        store.append(String(arr[j..<j+i]))
      }
    }
    
    var compact = ""
    var temp = ""
    var count = 1
    // ์ตœ์ข… ๋ฌธ์ž์—ด ๋งŒ๋“ค๊ธฐ
    for j in 0...store.count {
      
      // ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—ด ๊ณ„์‚ฐ
      if j == store.count {
        if count == 1 {
          compact += temp
        } else {
          compact += "\(count)\(temp)"
        }
        break
      }
      
      if j == 0 { temp = store[0]; continue }
      if temp != store[j] {
        if count == 1 {
          compact += temp
          temp = store[j]
        } else {
          compact += "\(count)\(temp)"
          temp = store[j]
          count = 1
        }
      } else {
        count += 1
      }
    }
    result = min(result,compact.count)
  }
  
  return result
}

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

์ด๊ฒŒ ์ข‹์€ํ’€์ด์ธ์ง€๋Š” ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ๋ณด์ง€ ์•Š์•„์„œ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ.. ์ตœ์„ ์„ ๋‹คํ–ˆ๋‹ค...

์ชผ๊ฐœ์ง€๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 1๋ถ€ํ„ฐ s.count/2 ๋งŒํผ for๋ฌธ์œผ๋กœ ๋ฐ˜๋ณตํ•ด์„œ i์— ๋„ฃ์–ด๋†“๊ณ 

swift๋Š” ๋ฌธ์ž์—ด๋ณด๋‹จ ๋ฐฐ์—ด์„ index๋กœ ๋‹ค๋ฃจ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์—
index๋ฅผ ํ†ตํ•ด ๋ฌธ์ž์—ด์„ ๋ฐ›์•„ ์˜ฌ๋• ๋ฐฐ์—ด๋กœ ์ชผ๊ฐฐ๋‹ค.

strideํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ชผ๊ฐœ์ง€๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋งŒํผ ๊ฑด๋„ˆ ๋›ฐ๋ฉฐ
๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ index๋ฅผ ๊ตฌํ•ด์คฌ๋‹ค.
๋”ฐ๋ผ์„œ String(arr(์‹œ์ž‘์ธ๋ฑ์Šค...์‹œ์ž‘์ธ๋ฑ์Šค+i)) ๋Š” ์›ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋” ์ž์„ธํ•œ ํ’€์ด๋Š” ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.