๐Ÿง‘๐Ÿป‍๐Ÿ’ป Coding Test/โŒจ๏ธ Programmers

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ

EarthSea 2024. 4. 13. 22:30

 

 

 

 

 

๐Ÿ„ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ’€์ด

โœ๐Ÿป ๋ฌธ์ œ ํ’€์ด github ๋งํฌ

 

 

๋ฌธ์ œ ์„ค๋ช…

๋‹ค์Œ ๊ทœ์น™์„ ์ง€ํ‚ค๋Š” ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • (), [], {} ๋Š” ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ A๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, (A), [A], {A} ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, [] ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ, ([]) ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ A, B๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, AB ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, {} ์™€ ([]) ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ, {}([]) ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

๋Œ€๊ด„ํ˜ธ, ์ค‘๊ด„ํ˜ธ, ๊ทธ๋ฆฌ๊ณ  ์†Œ๊ด„ํ˜ธ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด s๋ฅผ ์™ผ์ชฝ์œผ๋กœ x (0 ≤ x < (s์˜ ๊ธธ์ด)) ์นธ๋งŒํผ ํšŒ์ „์‹œ์ผฐ์„ ๋•Œ s๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ๋˜๊ฒŒ ํ•˜๋Š” x์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

์ œํ•œ์‚ฌํ•ญ

  • s์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

 

 

์ž…์ถœ๋ ฅ ์˜ˆ

s result
"{}" 3
"}]()[{" 2
"[)(]" 0
"}}}" 0

 

 

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ๋‹ค์Œ ํ‘œ๋Š” "[](){}" ๋ฅผ ํšŒ์ „์‹œํ‚จ ๋ชจ์Šต์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
x s๋ฅผ ์™ผ์ชฝ์œผ๋กœ x์นธ๋งŒํผ ํšŒ์ „ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด?
0 "{}" O
1 "](){}[" X
2 "(){}[]" O
3 "){}[](" X
4 "{}" O
5 "}{" X
  • ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ๋˜๋Š” x๊ฐ€ 3๊ฐœ์ด๋ฏ€๋กœ, 3์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ๋‹ค์Œ ํ‘œ๋Š” "}]()[{" ๋ฅผ ํšŒ์ „์‹œํ‚จ ๋ชจ์Šต์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
x s๋ฅผ ์™ผ์ชฝ์œผ๋กœ x์นธ๋งŒํผ ํšŒ์ „ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด?
0 "}]()[{" X
1 "]()[{}" X
2 "()[{}]" O
3 ")[{}](" X
4 "{}" O
5 "{}]()[" X
  • ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ๋˜๋Š” x๊ฐ€ 2๊ฐœ์ด๋ฏ€๋กœ, 2๋ฅผ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • s๋ฅผ ์–ด๋–ป๊ฒŒ ํšŒ์ „ํ•˜๋”๋ผ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, 0์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #4

  • s๋ฅผ ์–ด๋–ป๊ฒŒ ํšŒ์ „ํ•˜๋”๋ผ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, 0์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋ฌธ์ œ ํ’€์ด

๋‚˜์˜ ํ’€์ด

import Foundation

func solution(_ s:String) -> Int {
    
    var s = s
    var count = 0
    
    // s์˜ ๊ธธ์ด๊ฐ€ ํ™€์ˆ˜๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ํšŒ์ „ํ•˜๋”๋ผ๋„ 0 
    if s.count % 2 != 0 {
        return 0
    } 
    
    // s๋ฅผ ํšŒ์ „ํ•˜๋ฉฐ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ๋น„๊ต
    for _ in 1...s.count {
    
        // s๋ฅผ ํšŒ์ „
        var char = s.prefix(1)
        s.removeFirst()
        s = s + char
        
        var changeStr = s
        
        for _ in 1...s.count/2 {
            
            // ๋ฐ”๋€์ง€ ์•ˆ๋ฐ”๋€์ง€ ๋น„๊ต ๋ฌธ์ž์—ด
            var compareStr = changeStr
            
            changeStr = changeStr.replacingOccurrences(of: "{}", with: "")
            changeStr = changeStr.replacingOccurrences(of: "[]", with: "")
            changeStr = changeStr.replacingOccurrences(of: "()", with: "")
            
            if changeStr == "" {
                count += 1
                break
            }else if changeStr == compareStr {
                break
            }
        }
    }
    
    return count
}

์šฐ์„  ‘ํšŒ์ „์„ ์–ด๋–ป๊ฒŒ ํ•˜์ง€’ ๋ผ๋Š” ์ƒ๊ฐ์„ ๋จผ์ € ํ•˜๊ฒŒ๋˜์—ˆ๋‹ค. ๋ฌธ์ž์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 10,000์ด๊ธฐ์— ๊ผญ ํ•œ๋ฒˆ์€ for๋ฌธ์„ ๋Œ์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ for๋ฌธ์„ ๋Œ๋ฉฐ s์˜ ๋ฌธ์ž์—ด์„ ํšŒ์ „ํ•˜๊ธฐ ์œ„ํ•ด s์˜ ์ฒซ ๋ฌธ์ž๋ฅผ ๊บผ๋‚ด์–ด ๋ณ€์ˆ˜์— ์ €์žฅํ•œ ํ›„ ์ฒซ ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•˜๊ณ , ์ด ๋ฌธ์ž๋ฅผ ๋‹ค์‹œ ๋ฌธ์ž์—ด ๋’ค๋กœ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค.

 

์ค‘๊ด„ํ˜ธ, ๋Œ€๊ด„ํ˜ธ, ์†Œ๊ด„ํ˜ธ๊ฐ€ ๋ณด์ธ๋‹ค๋ฉด ์ด๋ฅผ ๋นˆ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๋Š” replacingOccurrences๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ , ์ด ๊ณผ์ •์„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๋‚˜๋ˆ„๊ธฐ 2๋งŒํผ ๋ฐ˜๋ณตํ•˜์˜€๋‹ค.

์ด ๊ณผ์ •์—์„œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด์ด ๋น„๊ฑฐ๋‚˜ ๋ฌธ์ž์—ด์— ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ค๋„๋ก ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

์ด๋•Œ ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ํ™€์ˆ˜๋ผ๋ฉด ๋ฌด์กฐ๊ฑด 0์ด ๋‚˜์˜จ๋‹ค๋Š” ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

 

 

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

func solution(_ s:String) -> Int {
    var answer: Int = 0
    var string = s
    var turnString = s

    for _ in 1...s.count {
       while string.contains("{}") || string.contains("[]") || string.contains("()") {
                string = string.replacingOccurrences(of: "{}", with: "")
                string = string.replacingOccurrences(of: "()", with: "")
                string = string.replacingOccurrences(of: "[]", with: "")
        }

        if string.count == 0 {
            answer += 1
        }

        string = turnString
        string.append(string.removeFirst())
        turnString = string
    }

    return answer
}

contains์„ ํ™œ์šฉํ•ด์„œ ํ’€๋ฉด ๋” ๊น”๋”ํ–ˆ์„๊ฑฐ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

string.append๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์—†์•ฐ๊ณผ ๋™์‹œ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.

 

var char = s.prefix(1)
s.removeFirst()
s = s + char

 

์ด ๋ถ€๋ถ„์„ ์ค„์ด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ, string์— ํŠน์ • ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” append ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค.