Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 1783๋ฒˆ - ๋ณ‘๋“  ๋‚˜์ดํŠธ

๊ฐ์ž ๐Ÿฅ” 2023. 2. 3. 21:21
๋ฐ˜์‘ํ˜•

๐ŸŸ  ๋ฌธ์ œ

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

 

1783๋ฒˆ: ๋ณ‘๋“  ๋‚˜์ดํŠธ

์ฒซ์งธ ์ค„์— ์ฒด์ŠคํŒ์˜ ์„ธ๋กœ ๊ธธ์ด N์™€ ๊ฐ€๋กœ ๊ธธ์ด M์ด ์ฃผ์–ด์ง„๋‹ค. N๊ณผ M์€ 2,000,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

 

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

์ฒ˜์Œ์— ์กฐ๊ธˆ ํ—ค๋งธ๋‹ค. ์‹ค๋ฒ„3์ธ๋ฐ ... ์™œ์ด๋Ÿฌ์ง€? ํ•˜๋จผ์…” ํ˜„ํƒ€๊ฐ€ ์™”์—ˆ๊ณ ,,, ์ž ๊น ํžŒํŠธ๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ ๊ทธ๋ƒฅ ๊ทœ์น™์„ ์ฐพ์•„๋‚ด๋ฉด ๋˜๋„ค...? ๊ทธ๋ฆฌ๋””๋ผ๊ณ  ํ•ด์„œ ๋„ˆ๋ฌด ์ˆ˜ํ•™์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ๋“  ์ฐพ์•„๋ณด๋ ค๊ณ  ํ–ˆ๋‹ค.... 

๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋ฉด์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ, N์˜ ๊ธธ์ด์™€ M์˜ ๊ธธ์ด์— ๋”ฐ๋ผ์„œ ์ตœ๋Œ€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์นธ์˜ ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ์žˆ์—ˆ๋‹ค. ์™œ๋ƒ๋ฉด, 4๋ฒˆ ์ด์ƒ์„ ์›€์ง์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œ 4๊ฐœ์˜ ๋ฐฉํ–ฅ์ „ํ™˜๋ฐฉ์‹์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผํ–ˆ๊ณ , ๊ทธ๋ž˜์„œ ํ•œ๋‘๊ฐ€์ง€์˜ ์ด๋™๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์ตœ๋Œ€ 3๋ฒˆ๊นŒ์ง€๋ฐ–์— ๋ชป์›€์ง์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

1. N=1 ์ธ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๋ฐ๋„ ์›€์ง์ผ์ˆ˜๊ฐ€ ์—†๋‹ค. ์ฆ‰, ์ฒ˜์Œ ๋„์ฐฉํ•œ ๊ทธ๊ณณ์ด ๋ฐฉ๋ฌธํ•œ ์นธ์ˆ˜์ด๋‹ค. ๋”ฑ ํ•œ์นธ ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•˜๋‹ค.

2. N = 2์ธ ๊ฒฝ์šฐ์—๋Š”, 2๋ฒˆ๊ณผ 3๋ฒˆ ๋ฐฉํ–ฅํ‚ค๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (์œ„์•„๋ž˜๋กœ ํ•œ์นธ์”ฉ๋งŒ ์ด๋™๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป.)
๊ทผ๋ฐ ๋˜, ๋ฌดํ•œ๋Œ€๋กœ ์›€์ง์ผ ์ˆ˜ ์—†๊ณ , ๋‘๊ฐ€์ง€์˜ ๋ฐฉํ–ฅํ‚ค๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ 3๋ฒˆ๋งŒ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค. 

๊ทธ๋ฆผ์„ ์ด๋ ‡๊ฒŒ ๊ทธ๋ ธ๋‹ค. 3๋ฒˆ ์›€์ง์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๊ฒƒ๋„ M์ด 5์ด์ƒ์ด์–ด์•ผํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด,, N=2๋ผ๋ฉด, ์ตœ๋Œ€๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” 4์นธ๊ณผ ์ž…๋ ฅ๋ฐ›์€ M ์‚ฌ์ด์—์„œ ๊ทœ์น™์„ ์ฐพ์•„์•ผํ•œ๋‹ค. ๊ทธ ์ฐพ์€ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

min( 4, (M+1)/2 )

M์ด 2๋ผ๋ฉด ์›€์ง์ด๋Š” ์ตœ๋Œ€ ์ˆ˜๋Š” 4๋ฐ–์— ์•ˆ๋˜๊ณ , M์ด 7๋ณด๋‹ค ์ž‘์œผ๋ฉด 4๋ณด๋‹ค ๊ทธ ์ดํ•˜์˜ ์ˆ˜๋ฅผ ์„ ํƒํ•ด์•ผํ•˜๊ณ , M์ด 7๋ณด๋‹ค ํฐ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ฒŒ ๋˜๋ฉด ์•„๋ฌด๋ฆฌ ์ปค๋„ 4๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ์†Œ๊ฐ’์„ 4์™€ ๋น„๊ตํ•ด์„œ ๋„ฃ์–ด์ค€๋‹ค.

3. N = 3์ธ๊ฒฝ์šฐ
์ด๋–„๋Š” 1๋ฒˆ๊ณผ 4๋ฒˆ ๋ฐฉํ–ฅํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ์—ด๋งˆ๋‹ค ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ M๋งŒํผ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋„, 1๊ณผ 4๋ฒˆ๋ฐฉํ–ฅํ‚ค๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ์นธ์ˆ˜๋Š” 4๋กœ ์ •ํ•ด์ ธ์žˆ๋‹ค. 

์—ฌ๊ธฐ์„œ ์กฐ๊ฑด๋ฌธ์„ ์ƒ๊ฐํ•˜๋Š”๋ฐ ์กฐ๊ธˆ ์• ๋ฅผ ๋จน์—‡๋‹ค. ์ผ๋‹จ ๋‹ค์Œ ์กฐ๊ฑด๋ถ€ํ„ฐ ๋ณด๊ณ  ์ •๋ฆฌํ•ด๋ณด์ž.

4. ๋ชจ๋“  ๋ฐฉํ–ฅํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” M์ด ๋ฌด์กฐ๊ฑด 7์ด์ƒ์ด์–ด์•ผํ•œ๋‹ค.
๋ชจ๋“  ๋ฐฉํ–ฅํ‚ค๋ฅผ ํ•œ๋ฒˆ์”ฉ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๊ฐ€๋กœ๊ธธ์ด๊ฐ€ 7์ด์ƒ์œผ๋กœ ๊ธธ์–ด์ ธ์•ผํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, ๋ฐฉํ–ฅํ‚ค๋Š” 3๋ฒˆ์ดํ•˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†๊ณ , ์ง€๊ธˆ๊นŒ์ง€ ์ž‘์„ฑํ•œ ์œ„์˜ ์กฐ๊ฑด๋“ค์— ๋ถ€ํ•ฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. 

๋งŒ์•ฝ M์ด 7์ดํ•˜์ด๋ฉด, ๊ฐ ์—ด๋งˆ๋‹ค ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด ์ตœ๋Œ€์ผ๊ฒƒ์ด๋‹ค. (1 4 1, 4 1 4 ์ด๋ ‡๊ฒŒ ๋ฐฉํ–ฅํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์„œ 4์นธ์„ ๋ฐฉ๋ฌธํ•˜๋Š”๊ฒŒ ์ตœ๋Œ€๊ฒ ์ง€)
๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ๋„ min์„ ํ™œ์šฉํ•ด์„œ 3๋ฒˆ๊ณผ ํ•ฉ์ณ์ง„ ์กฐ๊ฑด์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. (n==3์ธ ๊ฒฝ์šฐ๋„, ๊ฒฐ๊ตญ์—” M<7 ์ธ ์กฐ๊ฑด๊ณผ ๊ฐ™๋‹ค. ์—ด๋งˆ๋‹ค ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ!)

min( 4, M)

 

5. ์ด ๋ชจ๋“  ์กฐ๊ฑด์„ ๋น—๊ฒจ๋‚˜๊ฐ„๋‹ค๋ฉด, ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

๊ฒฐ๊ตญ ๋„ค๊ฐ€์ง€์˜ ๋ฐฉํ–ฅํ‚ค๋Š” ์ „๋ถ€ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์„ ํ–ฅํ•˜๊ฒŒ ๋˜์–ด์žˆ๋‹ค. ๋ชจ๋“  ๋ฐฉํ–ฅํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํ•œ๊ฐ€์ง€ ๋ฐฉํ–ฅํ‚ค๋งŒ ๋ฌดํ•œ๋Œ€๋กœ ์‚ฌ์šฉํ•ด์„œ ๋ฌดํ•œ๋Œ€๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค๊ณ  ์ณ๋„, ๊ฐ ์—ด๋งˆ๋‹ค ํ•œ์นธ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฐ๊ตญ,, 4๊ฐ€์ง€์˜ ๋ฐฉํ–ฅํ‚ค๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•œ ์ตœ๋Œ€์นธ์ˆ˜ 5์—๋‹ค๊ฐ€, M-7์—ด๋งŒํผ ์นธ์ˆ˜๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. (7์„ ๋นผ์ฃผ๋Š” ์ด์œ ๋Š”, 7์—ด๊ธฐ์ค€์œผ๋กœ 5์นธ์„ ์ด๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚จ์€ ์—ด๋งˆ๋‹ค ๋ฐฉ๋ฌธํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.)

์™€,, ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๋ฌธ์  ๋ฐ, ์ด๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ ์€๊ทผํžˆ ์• ๋ฅผ ๋จน์—ˆ๋˜ ๋ฌธ์ œ๋‹ค. ์ƒ๊ฐ๋งŒ ์ž˜ ํ•ด๋†“์œผ๋ฉด ์ฝ”๋“œ๋Š” ์ง„์งœ ๊ฐ„๋‹จํ•œ๋ฐ ๋ง์ด๋‹ค.... ์ด ๊ณผ์ •์„ ์ƒ๊ฐํ•ด๋‚ด๊ณ , ์กฐ๊ฑด๋ฌธ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ, ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ์˜ˆ์™ธ์‚ฌํ•ญ์„ ๋‹ค๋‹ด์„ ์ˆ˜ ์žˆ๋„๋ก ์ถ”๋ ค๋‚ด๋Š”๊ฒŒ ๊ด€๊ฑด์ด์—ˆ๋‹ค. ์–ด๋ ค์› ๋„ค.. ์‹ค๋ฒ„3์ฃผ์ œ์—..! ํ•˜..

 

๐ŸŸ  ์ •๋‹ต์ฝ”๋“œ

import Foundation

let nm = readLine()!.split(separator: " ").map{ Int($0)! }
let n = nm[0]
let m = nm[1]

private func solution(_ n: Int, _ m: Int) {
    if n == 1 {
        print(1)
    } else if n == 2 {
        print(min(4, (m+1)/2))
    } else if m < 7 {
        print(min(4, m))
    } else {
        print(m-2)
    }
}

solution(n, m)
๋ฐ˜์‘ํ˜•