Notice
Recent Posts
Recent Comments
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2. ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2. ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 4. 13. 19:16

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2. ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ

 

โœ… ์ด ๋ฌธ์ œ๋Š” ์ •๋ง ์˜ค๋žœ๊ธฐ๊ฐ„ ๋„์ „์„ ํ•˜์—ฌ ํ’€์–ด๋ƒˆ๋‹ค.

(์ฒซ ๋„์ „) 2021/08/08

(๋‘๋ฒˆ์งธ ๋„์ „) 2021/11/18

(์„ธ๋ฒˆ์งธ ๋„์ „) 2022/04/13

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ๊ท€์ฐฎ์•„์„œ ๊ณ„์† ๋ฏธ๋ค˜๊ณ , ์ž๊พธ ๋ฏธ๋ฃจ๋‹ค๊ฐ€ ๊ฒฐ๊ตญ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์•„์„œ ํ’€์–ด๋ƒ„!

 

์ด๊ฑฐ ๋จธ๋ฆฟ์†์œผ๋กœ๋Š” ์ดํ•ด๊ฐ€ ๋˜๋Š”๋ฐ, ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค.

 

โœ… ์ฒซ ๋„์ „

 

์ฒซ ๋„์ „์—์„œ์˜ ์ฝ”๋“œ

์•„๋ž˜ ์‚ฌ์ง„์„ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ fail

//
//  main.swift
//  algorithm
//
//  Created by Hamlit Jason on 2021/08/08.
//

/* ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ
 https://programmers.co.kr/learn/courses/30/lessons/42883
 ์‹คํŒจ
 */

import Foundation

func solution(_ number:String, _ k:Int) -> String {
    
    var arr = Array(number)
    //print(arr)
    //var startIndex = 0
    var k = k
    //print("start k is \(k)")
    var collect = [Character]()
    
    collect.append(arr[0])
    arr.removeFirst()
    for i in 0..<number.count {
        var prev = collect[collect.endIndex - 1].wholeNumberValue!
        let next = arr[0].wholeNumberValue! // Intํƒ€์ž…
        //print("\(i) -> prev: \(prev) next : \(next)")
        
        while true {
            //print("\(i) -> collect \(collect)")
            //print("\(i) -> arr \(arr)")
            if prev < next {
                collect.removeLast() // ๋งˆ์ง€๋ง‰๊บผ ๋นผ๊ณ 
                k -= 1 // k ๊ฐ’ ๊ฐ์†Œ ์นด์šดํŒ…
                //print("k in -> \(k) ")
                
                if k <= 0 {
                  //  print("out")
                    collect += arr
                    let answer = collect.reduce(""){"\($0)\($1)"}
                    return answer
                }
                
                if collect.count == 0 { // ๋บ๋Š”๋ฐ ์ปฌ๋ ‰ํ„ฐ ๊ฐ’์ด 0์ด๋ฉด
                    collect.append(arr[0])
                    arr.removeFirst()
                    break
                } else {
                    prev = collect[collect.endIndex-1].wholeNumberValue!
                }
            } else {
                //print(arr)
                if arr.isEmpty {
                    //collect += arr
                    let answer = collect.reduce(""){"\($0)\($1)"}
                    return answer
                }
                collect.append(arr[0])
                arr.removeFirst()
                break
            }
            
        }
        
//        print("collet : \(i) -> \(collect)")
//        print("arr : \(i) -> \(arr)")
    }
    
    return ""
}

print(solution("4177252841", 4))

ํ•˜...

 

โœ… 2์ฐจ ๋„์ „!!

//
//  main.swift
//  algorithm
//
//  Created by Hamlit Jason on 2021/11/18.
//https://programmers.co.kr/learn/courses/30/lessons/42883

import Foundation

func solution(_ number:String, _ k:Int) -> String {
    
    // ๊ฑ ๋‚˜๋ณด๋‹ค ์•ž์— ์žˆ๋Š” ์ˆ˜์ค‘์— ์ž‘์€๊ฑฐ ๋‹ค ์—†์• ๋ฉด ๋˜๊ฒ ๋„ค
    var queue = [Character]() // Int type
    var arr = number.map{$0} // String type
    var count = k
//    print(type(of: arr))
//    print(arr[0])
    
    if k == 0 {
        return number
    } else if arr.count - 1 == k {
        return "\(arr.max()!)"
    }
    
    while true {

        print("while head \(count)")
        if arr.count == 1 {
            print("arr count 1")
            break
        }
        
     
        if arr[0] < arr[1] { // ๋‚ด ๋’ค์˜ ์ˆซ์ž๊ฐ€ ๋” ํฌ๋ฉด
            print("\(arr[0]) \(arr[1])")
            arr.removeFirst()
            count -= 1
            if count == 0 {
                break
            }
            if !queue.isEmpty { // ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
                // ํ์˜ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด๊ฐ„ ์ˆซ์ž์™€ ํ˜„์žฌ ์ˆซ์ž ๋น„๊ต
                
                while true {
                    
                    if queue.isEmpty {
                        break
                    }
                    print("queue \(queue)")
                    
                    if arr[0] < queue.last! { // ํ์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด?
                        break
                    } else {
                        queue.removeLast()
                        count -= 1
                    }
                    
                    if count == 0 {
                        break
                    }
                }
            }
        } else {
            print("\(arr[0]) \(arr[1])")
            queue.append(arr[0])
            arr.removeFirst()
        }

        if count == 0 {
            break
        }
    }
    
    
    
    print("count\(count)")
    print("\(queue) \(arr)")
    var str1 = queue.reduce("") { s, ss in
        return "\(s)\(ss)"
    }
    var str2 = arr.reduce("") { s, ss in
        return "\(s)\(ss)"
    }
    
    var str3 = "\(str1)\(str2)"

    for _ in 0..<count {
//        print("count is \(count)")
        if let index = str3.firstIndex(of: str3.min()!) {
//            print("remove?")
            str3.remove(at: index)
        }
    }
    
//    print(str2)
    
    return "\(str3)"
}

//print(solution("4177252841", 4))
//print(solution("1924", 2))
//print(solution("1231234", 4))
//print(solution("99991", 3))
//print(solution("999", 1))

var a = [Character]()

for i in 0..<1000000 {
    a.append("9")
}

print(a)

//print(solution("111119", 3))

์•„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋งž๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ์‹œ.๊ฐ„.์ดˆ.๊ณผ

๋˜ ์•ˆ๋œ๋‹ค ^__^

 

 

์Œ... ์„ธ๋ฒˆ์งธ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

โœ… ์„ธ๋ฒˆ์งธ ๋„์ „

 

์„ฑ๊ณต !_!

๋‹ค๋ฅธ ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธด ํ–ˆ์œผ๋‚˜ ์ฃผ์„์œผ๋กœ ์ •๋ฆฌํ•˜๋ฉด์„œ ์ดํ•ดํ–ˆ๋‹ค ใ…Žใ…Ž

๋ช‡๋ช‡ ์ฝ”๋“œ์˜ ํŠน์ด์ ์ด ์žˆ์—ˆ๋Š”๋ฐ, ๊ผญ ํ™•์ธํ•ด๋ณด๋„๋ก ํ•˜์ž.

//
//  42883.swift
//  Algorithm
//
//  Created by Hamlit Jason on 2022/04/13.
//
//https://programmers.co.kr/learn/courses/30/lessons/42883
import Foundation

struct p42883 {
    static func run() {
//        print(p42883.solution("4177252841", 4)) // 94
        print(p42883.solution("119119", 5)) // 9
    }
    
    static func solution(_ number:String, _ k:Int) -> String {
        
        let map = number.map { "\($0)" }
        var stack = [String]()
        var count = 0
        
        for i in 0..<number.count {
            // ์•„์ง ๋œ ์ง€์› ๊ฑฐ๊ณ , ์Šคํƒ์— ๊ฐ’์ด ๋“ค์–ด์žˆ์œผ๋ฉด์„œ, ์Šคํƒ์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ๋น„๊ตํ•˜๋Š” ์ˆ˜๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
            while count < k && !stack.isEmpty && stack.last! < map[i] {
                stack.removeLast() // ์Šคํƒ๊ฐ’ ์ง€์šฐ๊ณ 
                count += 1 // ์ง€์› ๋‹ค๋Š” ์˜๋ฏธ์—์„œ + 1
            }
            
            if count >= k { // k๋งŒํผ ์ง€์› ๋‹ค๋ฉด
                stack.append(contentsOf: map[i...]) // ์Šคํƒ์— ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋‚จ์€ ๊ฐ’๋“ค ๋‹ค ๋„ฃ์–ด์คŒ
                break
            } else {
                stack.append(map[i]) // ์Šคํƒ์—์„œ ์ง€์šธ ์ˆ˜๋Š” ์—†๋Š”๋ฐ, ์ง€์šธ๊ฒŒ ๋‚จ์•˜๋‹ค๋ฉด ์Šคํƒ์— ๋„ฃ๊ธฐ
            }
        }
        
        // prefix๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” ์Šคํƒ์˜ ์•ž๋ถ€๋ถ„๋ถ€ํ„ฐ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ถœ๋ ฅ ๊ฐฏ์ˆ˜๋ฅผ ๋งž์ถฐ์ฃผ๊ธฐ ์œ„ํ•จ์ด๋‹ค.
        // ์˜ˆ๋ฅผ ๋“ค๋ฉด, "119119" ์˜ ๊ฒฝ์šฐ์—๋Š” 99๊ฐ€ ์ถœ๋ ฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฑธ ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
        print(stack.joined())
        return String(stack.joined().prefix(number.count-k))
    }
}

 

์•Œ ๊ณ  ๋ฆฌ ์ฆ˜ ์„ฑ ์žฅ ์™„ ๋ฃŒ

 

Comments