λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’― | λ°±μ€€/πŸ˜€ | Bronze

[Kotlin, B1] λ°±μ€€ 25551번 λ©‹μŸμ΄ ν¬λ‹‰μŠ€

by immgga 2024. 9. 13.

좜처: unsplash.com

 

λ©‹μŸμ΄ ν¬λ‹‰μŠ€(25551번)

Bronze 1

#μˆ˜ν•™

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

 

문제 λ‚΄μš©

 

 

문제 μ ‘κ·Ό

ν¬λ‹‰μŠ€κ°€ μ˜·μ„ μž…λŠ” κ·œμΉ™μ—μ„œ λˆˆμ—¬κ²¨λ³Ό 것은 옷의 색이닀.

λ§ˆμŠ€ν¬μ™€ ν‹°μ…”μΈ μ˜ 색이 달라야 ν•˜κ³ , 티셔츠와 바지 μ—­μ‹œ 색이 달라야 ν•œλ‹€.

그러면 μ˜·μ„ μž…λŠ” 경우의 μˆ˜κ°€ 2κ°€μ§€λ‘œ μ’ν˜€μ§„λ‹€.

  1. 검은색 마슀크 + 흰색 ν‹°μ…”μΈ  + 검은색 바지
  2. 흰색 마슀크 + 검은색 ν‹°μ…”μΈ  + 흰색 바지

μœ„ 2개의 경우만 문제의 1, 2번 κ·œμΉ™μ„ λ§Œμ‘±ν•˜λŠ” 볡μž₯이닀.

이 볡μž₯μ—μ„œ 같은 μƒ‰μ˜ μ˜·μ„ μ—°μ†ν•΄μ„œ μž…μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 1, 2λ²ˆμ„ λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μž…κ²Œ λœλ‹€.

λ˜ν•œ 1번 μ‚¬μš©ν•œ μ˜·μ€ λ‹€μ‹œ μž…μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 옷이 λͺ¨μžλΌκ²Œ 되면 μ—°μ†ν•΄μ„œ μ˜·μ„ κ³ λ₯Ό μˆ˜κ°€ μ—†λ‹€.

 

문제의 4번째 κ·œμΉ™μœΌλ‘œ κ΅¬ν˜„μ˜ 힌트λ₯Ό 얻을 수 μžˆλ‹€.

ν•œ μ’…λ₯˜μ˜ 옷이 λͺ¨μžλž„ λ•ŒκΉŒμ§€ μž…μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— κ°€μž₯ λΆ€μ‘±ν•œ 옷의 개수만큼 μ˜·μ„ μž…μ„ 수 있게 λœλ‹€.

예λ₯Ό λ“€μ–΄ 검은색 λ§ˆμŠ€ν¬κ°€ 2개, 흰색 ν‹°μ…”μΈ κ°€ 3개, 검은색 바지가 5κ°œκ°€ μžˆμ„ λ•Œ, 2λ²ˆκΉŒμ§€λ°–μ— κ³ λ₯Ό μˆ˜κ°€ μ—†λ‹€.

2번 κ³ λ₯΄κ³  λ‚˜λ©΄ 남은 검은색 마슀크의 κ°œμˆ˜κ°€ 0κ°œκ°€ 되기 λ•Œλ¬Έμ΄λ‹€.

 

<쑰건 1>

1, 2번 μ„ΈνŠΈλ₯Ό λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μž…κ²Œ λœλ‹€.

그러면 1, 2번 μ„ΈνŠΈμ—μ„œ 각각의 μ˜·μ—μ„œ κ°€μž₯ 적에 λ“€μ–΄ μžˆλŠ” 옷의 개수의 합이 ν¬λ‹‰μŠ€κ°€ μ˜·μ„ κ³ λ₯Ό 수 μžˆλŠ” νšŸμˆ˜κ°€ λœλ‹€.

μ—¬κΈ°μ—μ„œ 1개의 쑰건을 더 μΆ”κ°€ν•΄μ•Ό ν•œλ‹€.

λ§Œμ•½ 1번 μ„ΈνŠΈμ˜ μ΅œμ†Œ κ°œμˆ˜κ°€ 4이고, 2번 μ„ΈνŠΈμ˜ μ΅œμ†Œ κ°œμˆ˜κ°€ 6일 λ•Œ 각 μ„ΈνŠΈμ˜ 적게 λ“€μ–΄ μžˆλŠ” 옷의 합은 10이 λ˜λŠ”λ° 10이 λ˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.

2번 μ„ΈνŠΈλΆ€ν„° μž…λŠ”λ‹€κ³  해도 2, 1, 2, 1, 2, 1, 2, 1, 2의 μˆœμ„œλ‘œ μž…μœΌλ©΄ μ„ΈνŠΈ 2κ°€ 1κ°œκ°€ λ‚¨κ²Œ λœλ‹€.

남은 μ„ΈνŠΈλŠ” λ²„λ¦¬κ²Œ λΌμ„œ 정닡은 9κ°€ λœλ‹€.

κ·ΈλŸ¬λ―€λ‘œ 1, 2번 μ„ΈνŠΈμ˜ μ΅œμ†Œ 옷의 κ°œμˆ˜κ°€ λ‹€λ₯΄κ²Œ λœλ‹€λ©΄ 1, 2μ„ΈνŠΈ 쀑 더 적은 옷의 개수만큼 2λ₯Ό κ³±ν•˜κ³  1을 λ”ν•΄μ€˜μ•Ό ν•œλ‹€.

예λ₯Ό λ“€μ–΄ 1μ„ΈνŠΈκ°€ 3개고, 2μ„ΈνŠΈκ°€ 2개일 λ•Œ, 1μ„ΈνŠΈλ₯Ό λ¨Όμ € μž…κ³  λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μž…κ²Œ 되면 1, 2, 1, 2, 1둜 5λ²ˆμ„ μž…μ„ 수 μžˆμ§€λ§Œ, 2μ„ΈνŠΈλ₯Ό λ¨Όμ € μž…κ²Œ 되면 2, 1, 2, 1둜 4λ²ˆλ°–μ— μž…μ§€ λͺ»ν•œλ‹€. κ°€μž₯ κΈ΄ 경우λ₯Ό ꡬ해야 ν•˜κΈ° λ•Œλ¬Έμ— 두 μ„ΈνŠΈ 쀑에 더 μž‘μ€ 값에 2λ₯Ό κ³±ν•˜κ³  1을 λ”ν•΄μ£ΌλŠ” 것이닀.

 

 

문제 ν•΄κ²° μ½”λ“œ

더보기
import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.min

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val (maskW, maskB) = readLine().split(" ").map { it.toInt() }
    val (shirtW, shirtB) = readLine().split(" ").map { it.toInt() }
    val (pantsW, pantsB) = readLine().split(" ").map { it.toInt() }

    val set1Min = listOf(maskW, shirtB, pantsW).min()
    val set2Min = listOf(maskB, shirtW, pantsB).min()

    if (set1Min == set2Min) {
        println(set1Min * 2)
    } else {
        println(min(set1Min, set2Min) * 2 + 1)
    }
}

 

문제 풀이

각 마슀크, μ…”μΈ , λ°”μ§€μ˜ 개수λ₯Ό μž…λ ₯λ°›κ³  μ„ΈνŠΈμ— 맞게 리슀트둜 ꡬ성해 μ€€ λ‹€μŒ μ΅œμ†Ÿκ°’μ„ κ΅¬ν–ˆλ‹€.

그리고 set의 μ΅œμ†Ÿκ°’μ΄ λ‹€λ₯Έ κ²½μš°μ—λŠ” 쑰건 1을 μ μš©ν•΄μ„œ 2개의 μ„ΈνŠΈ 쀑 더 값이 μž‘μ€ μ„ΈνŠΈμ˜ 값에 2λ₯Ό κ³±ν•˜κ³  1을 더해쀀닀.

 

 

문제 ν•΄κ²° κ³Όμ •

μˆ˜ν•™μ  사고λ ₯이 μžˆμ–΄μ•Ό ν•œλ‹€.

무지성 whileλ¬ΈμœΌλ‘œλ„ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜μ§€λ§Œ, μ‹œκ°„ μ΄ˆκ³Όκ°€ λ‚œλ‹€.

문제 쑰건을 보고 μ˜·μ„ μž…μ„ 수 μžˆλŠ” κ²½μš°κ°€ 2κ°œλ°–μ— μ—†λŠ” 건 μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€.

ν•˜μ§€λ§Œ 각 μ„ΈνŠΈμ˜ μ΅œμ†Ÿκ°’μ— 따라 μ–΄λ–»κ²Œ κ°€μž₯ κΈ΄ 횟수λ₯Ό ꡬ성해야 ν•˜λŠ”μ§€λŠ” 머리λ₯Ό 쑰금 κ΅΄λ €μ•Ό ν•  것이닀.

728x90