๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] Strfry BOJ #11328

by seolhee2750 2021. 7. 28.
๋ฌธ์ œ ์„ค๋ช…

C ์–ธ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ฌธ์ž์—ด(string)์€ nativeํ•œ ์ž๋ฃŒํ˜•์ด ์•„๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๋ฌธ์ž์—ด์€ ๊ทธ์ €, ๋ฌธ์ž์—ด์˜ ๋์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๋ง๋‹จ์˜ NULL์ด ์‚ฌ์šฉ๋œ, ๋ฌธ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ผ ๋ฟ์ด๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, C ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” ๋ฐ์— ๋งค์šฐ ์œ ์šฉํ•œ ํ•จ์ˆ˜๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค : ๊ทธ๋“ค ์ค‘์—๋Š” strcpystrcmpstrtolstrtokstrlen, strcat ๊ฐ€ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ์ž˜ ์‚ฌ์šฉ๋˜์ง€๋„ ์•Š๋Š” ํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์žˆ๋‹ค : strfry ํ•จ์ˆ˜๋‹ค. strfry ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๋ฌด์ž‘์œ„๋กœ ์žฌ๋ฐฐ์—ดํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. (์—ญ์ž ์ฃผ : ์—ฌ๊ธฐ์—์„œ ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด๊ณผ ์ƒˆ๋กœ ์žฌ๋ฐฐ์—ด๋œ ๋ฌธ์ž์—ด์ด ๋‹ค๋ฅผ ํ•„์š”๋Š” ์—†๋‹ค.)

๋‘ ๊ฐœ์˜ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด, 2๋ฒˆ์งธ ๋ฌธ์ž์—ด์ด 1๋ฒˆ์งธ ๋ฌธ์ž์—ด์— strfry ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ์–ป์–ด์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋ผ.

 

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜ 0 < N < 1001 ์ด๋‹ค.

๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•˜๋‚˜์˜ ์ค„์— ์˜์–ด ์†Œ๋ฌธ์ž๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋‘ ๊ฐœ์˜ ๋ฌธ์ž์—ด์ด ํ•œ ๊ฐœ์˜ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 1000 ์ด๋‹ค.

 

์ถœ๋ ฅ

๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด, 2๋ฒˆ์งธ ๋ฌธ์ž์—ด์ด 1๋ฒˆ์งธ ๋ฌธ์ž์—ด์— strfry ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ์–ป์–ด์งˆ ์ˆ˜ ์žˆ๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ "Impossible"(๋ถˆ๊ฐ€๋Šฅ) ๋˜๋Š” "Possible"(๊ฐ€๋Šฅ)์œผ๋กœ ๋‚˜ํƒ€๋‚ด์‹œ์˜ค. (๋”ฐ์˜ดํ‘œ๋Š” ์ œ์™ธํ•˜๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.)

 

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

์ž…๋ ฅ

4
a a
ab ba
ring gnir
newt twan

์ถœ๋ ฅ

Possible
Possible
Possible
Impossible

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import Foundation

var num = Int(readLine()!)!

for _ in 0..<num {
    print(solution(readLine()!))
}

func solution(_ str: String) -> String {
    var arr = str.components(separatedBy: " ")
    
    for i in arr[1] {
        var n1 = 0
        var n2 = 0
        
        for j in arr[0] {
            if i == j { n1 += 1 }
        }
        for j in arr[1] {
            if i == j { n2 += 1  }
        }
        
        if n1 != n2 { return "Impossible" }
        else {
            arr[0] = arr[0].filter({$0 != i})
            arr[1] = arr[1].filter({$0 != i})
        }
    }
    
    return "Possible"
}
  • ํ•œ ์ค„์”ฉ ์ž…๋ ฅ ๋ฐ›๊ณ , solution ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค.
  • solution ํ•จ์ˆ˜์—์„œ๋Š” ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๊ณ  ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ  ๋ฐฐ์—ด๋กœ ์ƒ์„ฑํ–ˆ๋‹ค.
  • ํ•œ ์ค„๋กœ ์ž…๋ ฅ๋œ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ž์—ด ์ค‘ ๋‘ ๋ฒˆ์งธ์ธ arr[1]์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ for๋ฌธ์„ ๋Œ๋ ธ๋‹ค.
  • arr[1] ๋ฌธ์ž์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ธ€์ž๋ถ€ํ„ฐ arr[0]์—์„œ์˜ ํ•ด๋‹น ๊ธ€์ž์™€
    arr[1]์—์„œ์˜ ํ•ด๋‹น ๊ธ€์ž ๊ฐœ์ˆ˜๋ฅผ ๊ฐ๊ฐ ์„ธ์–ด ๋น„๊ตํ–ˆ๊ณ , 
    ๊ฐ ๋ฌธ์ž์—ด์—์„œ ํ•ด๋‹น ๊ธ€์ž์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฐ”๋กœ Impossible์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค.
    ๊ฐ™์„ ๊ฒฝ์šฐ์—” ํ•ด๋‹น ๋ฌธ์ž๋Š” filter๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ ๋ฌธ์ž์—ด์—์„œ ์ œ์™ธ์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์ƒ๊ฐ๋ณด๋‹ค ์˜ˆ์™ธ๊ฐ€ ๋งŽ์€ ๋ฌธ์ œ์ธ๋“ฏ ํ•˜๋‹ค.
  • ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๊ฐ€, ํ‹€๋ฆด ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์˜ˆ์™ธ๊ฐ€ ์ƒ๊ฐ๋‚˜์„œ ๊ณ„์† ์ˆ˜์ •ํ–ˆ๋‹ค.

 


 

๋ฌธ์ œ

https://www.acmicpc.net/problem/11328

๋Œ“๊ธ€