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

[๋ฐฑ์ค€ 1834] ๋‚˜๋จธ์ง€์™€ ๋ชซ์ด ๊ฐ™์€ ์ˆ˜ ๋ณธ๋ฌธ

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

[๋ฐฑ์ค€ 1834] ๋‚˜๋จธ์ง€์™€ ๋ชซ์ด ๊ฐ™์€ ์ˆ˜

๋น„๋น„ bibi 2022. 8. 31. 12:32

1834๋ฒˆ: ๋‚˜๋จธ์ง€์™€ ๋ชซ์ด ๊ฐ™์€ ์ˆ˜

N์ด ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ, ๋‚˜๋จธ์ง€์™€ ๋ชซ์ด ๊ฐ™์€ ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

  • 3์ด ์ž…๋ ฅ๋˜๋ฉด
    • 1 / 3 : ๋ชซ 0, ๋‚˜๋จธ์ง€ 1
    • 2 / 3 : ๋ชซ 0, ๋‚˜๋จธ์ง€ 2
    • 3 / 3 : ๋ชซ 1, ๋‚˜๋จธ์ง€ 0
    • 4 / 3 : ๋ชซ 1, ๋‚˜๋จธ์ง€ 1 (โœ”๏ธ)
    • 5 / 3 : ๋ชซ 1, ๋‚˜๋จธ์ง€ 2
    • 6 / 3 : ๋ชซ 2, ๋‚˜๋จธ์ง€ 0
    • 7 / 3 : ๋ชซ 2, ๋‚˜๋จธ์ง€ 1
    • 8 / 3 : ๋ชซ 2, ๋‚˜๋จธ์ง€ 2 (โœ”๏ธ)
    • 9 / 3 : ๋ชซ 3, ๋‚˜๋จธ์ง€ 1
    • ๋‚˜๋จธ์ง€์™€ ๋ชซ์ด ๊ฐ™์€ ์ˆ˜๋Š” 4, 8 ์ด๋ฉฐ, ๋‹ต์€ ์ด ์ˆ˜๋“ค์„ ํ•ฉํ•œ 12์ด๋‹ค.
  • ๐Ÿค” ๋Œ€์ƒ ์ž์—ฐ์ˆ˜์— ์ œํ•œ๋„ ์—†๋Š”๋ฐ ๋‹ต์ด ๋‚˜์˜ฌ๋•Œ๊นŒ์ง€ ๋ฌด์กฐ๊ฑด ๋‚˜๋ˆ ์•ผ ํ•˜๋‚˜?
    • ์•„๋‹ˆ๋‹ค. ์œ„ ์˜ˆ์ œ์˜ ํŒจํ„ด์„ ๋ณด๋ฉด โ€œ๋‚˜๋จธ์ง€๋Š” ํ•ญ์ƒ 0 ๋ถ€ํ„ฐ N-1๊นŒ์ง€"์˜ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.
    • ๋˜, ๋‚˜๋จธ์ง€ == ๋ชซ ์ด์–ด์•ผ ํ•˜๋Š”๋ฐ ๋‚˜๋จธ์ง€์˜ ์ตœ๋Œ“๊ฐ’์ด N-1์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ชซ == N ์ด ๋˜๋Š” ์‹œ์ ๋ถ€ํ„ฐ๋Š” ๊ตฌํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค (๊ทธ ์ดํ›„๋ถ€ํ„ฐ๋Š” ๋ชซ๋งŒ ์ ์  ์ปค์ ธ ๋‚˜๋จธ์ง€==๋ชซ์ด ๋  ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ).
  • ์—ฌ๊ธฐ๊นŒ์ง€ ๊ฒฐ๋ก ์„ ๋‚ด๊ณ  ํ’€์–ด ๋ณด์•˜๋‹ค ( ํ’€์ด1 )

ํ’€์ด 1

// ์‹œ๊ฐ„์ดˆ๊ณผ
let n = Int(readLine()!)!
var number = 1
var answers: [Int] = []
while true {
    let ๋‚˜๋จธ์ง€ = number % n // ๋‚˜๋จธ์ง€๋Š” 0 ~ n-1
    let ๋ชซ = number / n // ๋ชซ์€ ๊ณ„์† ์ปค์ง€๊ธฐ๋งŒ ํ•จ
    if ๋‚˜๋จธ์ง€ == ๋ชซ {
        answers.append(number)
    }
    number += 1
    if ๋ชซ == n { // ๋ชซ์ด n๊ณผ ๊ฐ™์•„์ง€๋ฉด ๊ทธ ์ดํ›„๋Š” ๋ณผ ํ•„์š” X
        break
    }
}
print(answers.reduce(0) { $0 + $1 })
  • ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค.
  • ๐Ÿค” ์—ฌ๊ธฐ์„œ ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๋” ์ค„์ด์ง€?
    • 1๋ถ€ํ„ฐ ๋ชซ์ด n๊ณผ ๊ฐ™์•„์ง€๋Š” ์ž์—ฐ์ˆ˜๊นŒ์ง€ ๋ชจ๋‘ ์ฐพ์•„๋ณด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ž˜ ๊ฑธ๋ฆผ = O(n)๊ผด๋กœ ๋น„๊ต
    • ์ƒ๊ฐํ•ด ๋ณด๋‹ˆ N์˜ ์ตœ๋Œ“๊ฐ’์ด 2,000,000์ด๋ผ๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ“๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ๋ช‡๋ฐฑ๋งŒ๊ฐœ์˜ ์ˆ˜๋ฅผ ์ผ์ผ์ด ๋น„๊ตํ•˜๊ฒŒ ๋œ๋‹ค
    • ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ โ€˜๋ชซ๊ณผ ๋‚˜๋จธ์ง€๊ฐ€ ๊ฐ™์€' ์ˆ˜ ๋ฟ์ด๊ณ , ์กฐ๊ฑด๋„ ์ž์—ฐ์ˆ˜๋กœ ํ•œ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€์™€ ๊ฐ™์€ ์ˆ˜๋งŒ ๊ตฌํ•˜์ž. ( ํ’€์ด2 )

ํ’€์ด2

// ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ
let n = Int(readLine()!)!
var ๋ชซ๊ณผ๋‚˜๋จธ์ง€ = 1
var answers: [Int] = []
while true {
    let number = n * ๋ชซ๊ณผ๋‚˜๋จธ์ง€ + ๋ชซ๊ณผ๋‚˜๋จธ์ง€
    print(number)
    answers.append(number)
    ๋ชซ๊ณผ๋‚˜๋จธ์ง€ += 1
    if ๋ชซ๊ณผ๋‚˜๋จธ์ง€ == n {
        break
    }
}
print(answers.reduce(0) { $0 + $1 })
  • ๋ชซ๊ณผ ๋‚˜๋จธ์ง€๊ฐ€ ๊ฐ™์€ ์ˆ˜ = N * 1 + 1, N * 2 + 2, N * 3 + 3 โ€ฆ ์˜ ๊ผด์ด๋‹ค
  • ๋”ฐ๋ผ์„œ ๋ชซ๊ณผ๋‚˜๋จธ์ง€๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ์œ„ ๊ณต์‹์— ๋”ฐ๋ผ โ€˜๋ชซ๊ณผ ๋‚˜๋จธ์ง€๊ฐ€ ๊ฐ™์€ ์ˆ˜'๋ฅผ ๊ตฌํ•œ๋‹ค
  • ๐Ÿค” ์ด๋ฒˆ์—” ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ฐฐ์—ด์„ ๋„ˆ๋ฌด ๊ธธ๊ฒŒ ์‚ฌ์šฉํ•  ๋•Œ ๋œฌ๋‹ค๊ณ  ํ•œ๋‹ค
    • ์ƒ๊ฐํ•ด ๋ณด๋‹ˆ answer๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐ ๋ฐฐ์—ด์— ๋„ฃ๊ณ  ๊ทธ๊ฒƒ์„ ํ•ฉํ•  ํ•„์š”๊ฐ€ ์—†์–ด, ๊ทธ๋ƒฅ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค

ํ’€์ด3

// ๋Ÿฐํƒ€์ž„์—๋Ÿฌ
let n = Int(readLine()!)!
var ๋ชซ๊ณผ๋‚˜๋จธ์ง€ = 1
var answer = 0
while true {
    let number = n * ๋ชซ๊ณผ๋‚˜๋จธ์ง€ + ๋ชซ๊ณผ๋‚˜๋จธ์ง€
    answer += number
    ๋ชซ๊ณผ๋‚˜๋จธ์ง€ += 1
    if ๋ชซ๊ณผ๋‚˜๋จธ์ง€ == n {
        break
    }
}
print(answer)
  • ๊ตฌํ•ด์ง„ โ€˜๋ชซ๊ณผ ๋‚˜๋จธ์ง€๊ฐ€ ๊ฐ™์€ ์ˆ˜'๋ฅผ answer์— ๋ฐ”๋กœ ๋”ํ•œ๋‹ค
  • ๐Ÿค” ์ด๋ฒˆ์—” ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค.
    • ๋ฐฐ์—ด๋„ ์•ˆ ์ผ๋Š”๋ฐ ์™œ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋œจ์ง€?
    • ์ฑ„์ ์ด ์•ˆ ๋˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ , 96%์ •๋„ ๋์„ ๋•Œ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ ๋ฐœ์ƒ
    • ํ˜น์‹œ๋‚˜ ํ•ด์„œ breakํƒ€์ด๋ฐ์„ ์•ž๋‹น๊ธฐ๊ณ , ์ด๋ฅผ ์œ„ํ•ด ๋ชซ๊ณผ๋‚˜๋จธ์ง€๋ฅผ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ณด์•˜๋‹ค ( ํ’€์ด4 )

ํ’€์ด4 (๋งž์•˜์Šต๋‹ˆ๋‹ค)

let n = Int(readLine()!)!
var ๋ชซ๊ณผ๋‚˜๋จธ์ง€ = 0
var answer = 0
while true {
    ๋ชซ๊ณผ๋‚˜๋จธ์ง€ += 1
    if ๋ชซ๊ณผ๋‚˜๋จธ์ง€ == n {
        break
    }
    let number = n * ๋ชซ๊ณผ๋‚˜๋จธ์ง€ + ๋ชซ๊ณผ๋‚˜๋จธ์ง€
    answer += number

}
print(answer)

์ตœ์ข…์ ์œผ๋กœ ๋‹ต์œผ๋กœ ์ œ์ถœํ•ด ๋งž์€ ์ฝ”๋“œ๋Š” ์ด๋ ‡๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ’€์ด 3์—์„œ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ์™œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋Š” ์•„์ง๋„ ์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ..

์•„๋งˆ while๋ฌธ ๋‚ด์˜ break ํƒ€์ด๋ฐ์ด ์•ž์— ์žˆ์ง€ ์•Š์•„์„œ? ๋ผ๊ณ  ์ถ”์ธกํ•ด ๋ณด์•˜๋‹ค.