ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์‹คํŒจ์œจ Level1 (Swift)
    Algorithm 2022. 2. 1. 03:17
     

    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์‹คํŒจ์œจ

    ์‹คํŒจ์œจ ์Šˆํผ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž ์˜ค๋ ๋ฆฌ๋Š” ํฐ ๊ณ ๋ฏผ์— ๋น ์กŒ๋‹ค. ๊ทธ๋…€๊ฐ€ ๋งŒ๋“  ํ”„๋žœ์ฆˆ ์˜ค์ฒœ์„ฑ์ด ๋Œ€์„ฑ๊ณต์„ ๊ฑฐ๋’€์ง€๋งŒ, ์š”์ฆ˜ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์˜ ์ˆ˜๊ฐ€ ๊ธ‰๊ฐํ•œ ๊ฒƒ์ด๋‹ค. ์›์ธ์€ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์™€ ๊ธฐ์กด ์‚ฌ์šฉ์ž ์‚ฌ์ด์— ์Šค

    programmers.co.kr

    ๋ฌธ์ œ ํ’€์ด

    • ํ‘ธ๋Š” ๋ฐ ์ •๋ง ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๋ฌธ์ œ... ๋Œ€์ถฉ ๋จธ๋ฆฟ์†์œผ๋กœ ํฐ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๊ณ , while ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.
    • ์ฒซ๋ฒˆ์งธ ์ƒ๊ฐ
      • ๋จผ์ € ์ž…๋ ฅ์œผ๋กœ ์˜ค๋Š” ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผ์ง€!
      • ๊ทธ ๋ฐฐ์—ด์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์žˆ์œผ๋‹ˆ, ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฒดํฌํ•˜๋ฉด ๋˜๊ฒ ๋‹ค!
      • [1, 2, 2, 2, 3, 3, 4, 6]์„ ์˜ˆ์‹œ๋กœ ๋“ค์ž. 1๋‹จ๊ณ„์— ๋จธ๋ฌผ๋Ÿฌ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค 1๋ช…์ด๋‹ค. 2๋‹จ๊ณ„์— ๋จธ๋ฌผ๋Ÿฌ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ฐฐ์—ด์˜ 1, 2, 3๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ 3๋ช…์ด๋‹ค. 3๋‹จ๊ณ„๋Š” ๋ฐฐ์—ด์˜ 4, 5๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ 2๋ช…์ด๋‹ค. 4๋‹จ๊ณ„๋Š” ๋ฐฐ์—ด์˜ 6๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ 1๋ช…์ด๋‹ค. 5๋‹จ๊ณ„๋Š” ์•„๋ฌด๋„ ์—†๋‹ค. 6๋‹จ๊ณ„๋Š” ์ด๋ฏธ 5๋‹จ๊ณ„๋ฅผ ํ†ต๊ณผํ–ˆ๋‹ค๋Š” ๋œป.
      • ์œ„์˜ ๊ฒฝ์šฐ๋ฅผ while ๋ฌธ์—์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฒ˜๋ฆฌํ•˜๋ ค๋‹ˆ ๋จธ๋ฆฌ๊ฐ€ ํ„ฐ์ง€๊ณ .. ํ•˜๋‚˜์˜ ์˜ˆ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋‹ค๋ฅธ ์˜ˆ์ œ๊ฐ€ ํ„ฐ์ง€๊ณ ๋ฅผ ๋ฐ˜๋ณต. ๊ณ„์† ์ด๋Ÿด๋ฐ”์—๋Š” for๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ž..! ⇒ ๋‘๋ฒˆ์งธ ์ƒ๊ฐ
    • ๋‘๋ฒˆ์งธ ์ƒ๊ฐ
      • ์ด์ค‘ for๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฒ˜๋ฆฌํ•˜์ž
      • ์Šคํ…Œ์ด์ง€ ์ˆ˜๋งŒํผ for๋ฌธ์„ ๋Œ๋ฆฌ๋Š”๋ฐ, ๊ฐ ์Šคํ…Œ์ด์ง€ ๋ณ„๋กœ ๋˜ for๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค.
      • N = 5, stages = [1, 2, 2, 2, 3, 3, 4, 6]
      • currentStageUserCount = ํ•ด๋‹น ์Šคํ…Œ์ด์ง€์— ์•„์ง ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋Š” ์œ ์ € ์ˆ˜
      • userCount = ์Šคํ…Œ์ด์ง€๋ฅผ ํ”Œ๋ ˆ์ดํ•œ ์œ ์ € ์ˆ˜ (์•„์ง ํ•ด๋‹น ์Šคํ…Œ์ด์ง€๋ฅผ ์ง„ํ–‰ ์ค‘์ธ ์œ ์ €๋„ ํฌํ•จ)
      • ์‹คํŒจ์œจ = currentStageUserCount / userCount

      ์Šคํ…Œ์ด์ง€ ์Šคํ…Œ์ด์ง€ ๋ฐฐ์—ด currentStageUserCount userCount ์‹คํŒจ์œจ (currentStageUserCount / userCount)
      ์Šคํ…Œ์ด์ง€ 1 ⇒ ๋ฐฐ์—ด์—์„œ 1๋งŒ ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 1 8 1/8
      ์Šคํ…Œ์ด์ง€ 2 ⇒ ๋ฐฐ์—ด์—์„œ 2๋งŒ ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 3 8 - 1 = 7 3/7
      ์Šคํ…Œ์ด์ง€ 3 ⇒ ๋ฐฐ์—ด์—์„œ 3๋งŒ ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 2 7 - 3 = 4 2/4
      ์Šคํ…Œ์ด์ง€ 4 ⇒ ๋ฐฐ์—ด์—์„œ 4๋งŒ ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 1 4 - 2 = 2 1/2
      ์Šคํ…Œ์ด์ง€ 5 ⇒ ๋ฐฐ์—ด์—์„œ 5๋งŒ ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 0 1 0/1 = 0
    • ์œ„์™€ ๊ฐ™์ด ํ‘œ๋ฅผ ๋งŒ๋“ค๊ณ , for ๋ฌธ์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ์ถœํ•˜๋‹ˆ ํ…Œ์ŠคํŠธ 7์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ†ต๊ณผ..! ํ…Œ์ŠคํŠธ 7์€ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
    • ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์งˆ๋ฌธ์„ ์ฐพ์•„๋ดค๋Š”๋ฐ, 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ๋ฅผ ์กฐ์‹ฌํ•˜๋ผ๋Š” ๋ง์ด ์žˆ์–ด์„œ ๊ทธ ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋žฌ๋”๋‹ˆ ์ •๋‹ต..!
      // ์ˆ˜์ • ์ „
      result[resultIndex].1 = Double(currentStageUserCount) / Double(userCount)
      
      
      // ์ˆ˜์ • ํ›„
      if currentStageUserCount == 0 {
          result[resultIndex].1 = 0
      } else {
          result[resultIndex].1 = Double(currentStageUserCount) / Double(userCount)
      }
    • ๊ณ ์ž‘ Level1์ด์ง€๋งŒ,, ์•Œ๋ฆฐ์ด์ธ ๋‚˜๋Š” ์ด๊ฑธ ํ‘ธ๋Š”๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค..๐Ÿ˜ญ ๊ทธ๋ž˜๋„ ์Šค์Šค๋กœ ํ’€์—ˆ๋‹ค๋Š” ๊ฒƒ์— ์˜์˜๋ฅผ ๋‘๊ธฐ๋กœ!!!!! ์ด๋ ‡๊ฒŒ ๊พธ์ค€ํžˆ ํ•˜๋‹ค๋ณด๋ฉด ์–ธ์  ๊ฐ„ ๋Š˜๊ฒ ์ง€,,๐Ÿฅบ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋งค์ผ๋งค์ผ ๋ฟŒ์…”๋ฟŒ์…”

    ์†Œ์Šค ์ฝ”๋“œ (Swift)

    //
    //  แ„‰แ…ตแ†ฏแ„‘แ…ขแ„‹แ…ฒแ†ฏ.swift
    //  Programmers
    //
    //  Created by ์•ˆ์ƒํฌ on 2022/02/01.
    //
    
    import Foundation
    
    func solution(_ N:Int, _ stages:[Int]) -> [Int] {
        var result = [(Int, Double)]()
        for i in 0..<N {
            result.append((i + 1, 0.0))
        }
        
        let userState = stages.sorted() // 1 2 2 2 3 3 4 6
        var userCount = stages.count // ์Šคํ…Œ์ด์ง€๋ฅผ ํ”Œ๋ ˆ์ดํ•œ ์œ ์ € ์ˆ˜ (์•„์ง ํ•ด๋‹น ์Šคํ…Œ์ด์ง€๋ฅผ ์ง„ํ–‰ ์ค‘์ธ ์œ ์ €๋„ ํฌํ•จ)
        var currentStageUserCount = 0 // ํ•ด๋‹น ์Šคํ…Œ์ด์ง€์— ์•„์ง ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋Š” ์œ ์ € ์ˆ˜
        var stateIndex = 0 // userState ๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉํ•  ์ธ๋ฑ์Šค
        var resultIndex = 0 // result ๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉํ•  ์ธ๋ฑ์Šค
        
        for i in 1...N { // ์Šคํ…Œ์ด์ง€ ์ฒดํฌ
            for j in stateIndex..<stages.count {
                if userState[j] == i {
                    currentStageUserCount += 1
                    stateIndex += 1
                }
            }
            
            if currentStageUserCount == 0 {
                result[resultIndex].1 = 0
            } else {
                result[resultIndex].1 = Double(currentStageUserCount) / Double(userCount)
            }
            
            userCount -= currentStageUserCount // ์œ ์ € ์ˆ˜ ๊ตฌํ•˜๊ธฐ
            resultIndex += 1 // ๋‹ค์Œ ์Šคํ…Œ์ด์ง€
            currentStageUserCount = 0 // ์ดˆ๊ธฐํ™”
        }
    
        return result.sorted { $0.1 > $1.1 }.map { $0.0 }
    }
    

    ๋Œ“๊ธ€

Designed by Tistory.