Bibi's DevLog ๐Ÿค“๐ŸŽ

[๋ฐฑ์ค€ 2309] ์ผ๊ณฑ ๋‚œ์Ÿ์ด ๋ณธ๋ฌธ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด Swift

[๋ฐฑ์ค€ 2309] ์ผ๊ณฑ ๋‚œ์Ÿ์ด

๋น„๋น„ bibi 2022. 9. 7. 12:33

2309๋ฒˆ: ์ผ๊ณฑ ๋‚œ์Ÿ์ด

 

2309๋ฒˆ: ์ผ๊ณฑ ๋‚œ์Ÿ์ด

์•„ํ™‰ ๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‚œ์Ÿ์ด๋“ค์˜ ํ‚ค๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ํ‚ค๋Š” 100์„ ๋„˜์ง€ ์•Š๋Š” ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ์•„ํ™‰ ๋‚œ์Ÿ์ด์˜ ํ‚ค๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋ฉฐ, ๊ฐ€๋Šฅํ•œ ์ •๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

3040๋ฒˆ: ๋ฐฑ์„ค ๊ณต์ฃผ์™€ ์ผ๊ณฑ ๋‚œ์Ÿ์ด ๋ฌธ์ œ์™€ ๋™์ผํ•˜๋‹ค.

  • ์ด ๋ฌธ์ œ๋Š” 2์‹œ๊ฐ„์ •๋„ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์Šค์Šค๋กœ ํ’€๊ธฐ ์–ด๋ ค์›Œ ๊ตฌ๊ธ€๋งํ•ด ๋ณด์•˜๋‹ค.
  • ์•„๋ž˜๋Š” ์ฐธ๊ณ ํ•œ ๋งํฌ๋“ค.

(Swift) ๋ฐฑ์ค€ 2309 ์ผ๊ณฑ ๋‚œ์Ÿ์ด

[์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„] ์ˆœ์—ด(Permutation)๊ณผ ์กฐํ•ฉ(Combination) ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ•ด์„ค

  • ์šฐ์„ ์€, ๋ฌธ์ œ ๊ทธ๋Œ€๋กœ ํ‚ค์˜ ํ•ฉ์ด 100์ด ๋˜๋Š” 7๋ช…์„ ์ฐพ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ‚ค์˜ ํ•ฉ์ด ์ „์ฒดํ•ฉ - 100 ์ด ๋˜๋Š” ๋‚˜๋จธ์ง€ 2๋ช…์„ ์ฐพ๋Š”๋‹ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.
  • ์ฐพ์•„์•ผ ํ•  ๋Œ€์ƒ์ด 7๊ฐœ์—์„œ 2๊ฐœ๋กœ ์ค„์—ˆ์œผ๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ ๋Œ€์‹  ์กฐํ•ฉ(combination)์œผ๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.
    • ์ˆœ์—ด๊ณผ ์กฐํ•ฉ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์„ ๋Š๊ผˆ๋‹ค.
  • (์ถ”๊ฐ€) ์ด์ค‘for๋ฌธ ๋‚ด์—์„œ ๊ทธ๋ƒฅ break๋ฅผ ํ•˜๋ฉด ๋ฐ”๊นฅ ๋ฐ˜๋ณต๋ฌธ์„ ํƒˆ์ถœํ•˜์ง€ ๋ชปํ•ด ์ธ๋ฑ์Šค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ˜๋“œ์‹œ ๋ฐ”๊นฅ ๋ฃจํ”„์— ์ด๋ฆ„์„ ๋ถ™์—ฌ ์ฃผ๊ณ , ๊ทธ ๋ฃจํ”„ ์ „์ฒด๋ฅผ ํƒˆ์ถœํ•จ์„ ๋ช…์‹œํ•ด ์ค˜์•ผ ํ•œ๋‹ค.

ํ’€์ด1

var inputArr: [Int] = []
for _ in 1...9 {
    let input = Int(readLine()!)!
    inputArr.append(input)
}
inputArr.sort()
let exceptSum = inputArr.reduce(0, +) - 100
outerLoop : for index1 in inputArr.indices {
    let except1 = inputArr[index1]
    for index2 in inputArr.indices {
        let except2 = inputArr[index2]
        if (except1 + except2 == exceptSum) {
            inputArr.remove(at: max(index1, index2))
            inputArr.remove(at: min(index1, index2))
            break outerLoop
        }
    }
}
for input in inputArr {
    print(input)
}

ํ’€์ด2

var inputArr: [Int] = []
(1...9).forEach { _ in
    inputArr.append(Int(readLine()!)!)
}
let sum = inputArr.reduce(0, +)
let remain = sum - 100
outerLoop: for i in inputArr.indices {
    for j in inputArr.indices {
        let a = inputArr[i]
        let b = inputArr[j]
        if i != j && inputArr[i] + inputArr[j] == remain {
            inputArr.remove(at: inputArr.firstIndex(of: a)!)
            inputArr.remove(at: inputArr.firstIndex(of: b)!)
            break outerLoop // ๋งค์šฐ ํ•„์š”!
        }
    }
}
inputArr.forEach { print($0) }