Programming/Algorithm

[Kotlin] λ°±μ€€ 2309 - 일곱 λ‚œμŸμ΄

Space_Jin 2024. 10. 20. 17:30
728x90
λ°˜μ‘ν˜•

문제

μ™•λΉ„λ₯Ό ν”Όν•΄ 일곱 λ‚œμŸμ΄λ“€κ³Ό ν•¨κ»˜ ν‰ν™”λ‘­κ²Œ μƒν™œν•˜κ³  있던 λ°±μ„€κ³΅μ£Όμ—κ²Œ μœ„κΈ°κ°€ μ°Ύμ•„μ™”λ‹€. 일과λ₯Ό 마치고 λŒμ•„μ˜¨ λ‚œμŸμ΄κ°€ 일곱 λͺ…이 μ•„λ‹Œ 아홉 λͺ…μ΄μ—ˆλ˜ 것이닀.

아홉 λͺ…μ˜ λ‚œμŸμ΄λŠ” λͺ¨λ‘ μžμ‹ μ΄ "λ°±μ„€ 곡주와 일곱 λ‚œμŸμ΄"의 주인곡이라고 μ£Όμž₯ν–ˆλ‹€. λ›°μ–΄λ‚œ μˆ˜ν•™μ  직관λ ₯을 가지고 있던 λ°±μ„€κ³΅μ£ΌλŠ”, λ‹€ν–‰μŠ€λŸ½κ²Œλ„ 일곱 λ‚œμŸμ΄μ˜ ν‚€μ˜ 합이 100이 됨을 κΈ°μ–΅ν•΄ λƒˆλ‹€.

아홉 λ‚œμŸμ΄μ˜ ν‚€κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 백섀곡주λ₯Ό 도와 일곱 λ‚œμŸμ΄λ₯Ό μ°ΎλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

아홉 개의 쀄에 걸쳐 λ‚œμŸμ΄λ“€μ˜ ν‚€κ°€ 주어진닀. μ£Όμ–΄μ§€λŠ” ν‚€λŠ” 100을 λ„˜μ§€ μ•ŠλŠ” μžμ—°μˆ˜μ΄λ©°, 아홉 λ‚œμŸμ΄μ˜ ν‚€λŠ” λͺ¨λ‘ λ‹€λ₯΄λ©°, κ°€λŠ₯ν•œ 정닡이 μ—¬λŸ¬ 가지인 κ²½μš°μ—λŠ” μ•„λ¬΄κ±°λ‚˜ 좜λ ₯ν•œλ‹€.

풀이
1. 합이 100이 λ˜λŠ” 경우λ₯Ό μ°ΎλŠ”λ‹€.
2. λ‚œμŸμ΄μ˜ 7λͺ…μ˜ ν‚€ 총합을 κ΅¬ν•˜λŠ” 방법, λ‚œμŸμ΄ ν‚€μ˜ μ΄ν•©μ—μ„œ 2λͺ…μ˜ ν‚€ 합을 λΉΌλŠ” 방법 쀑 더 적은 싀행이 κ°€λŠ₯ν•œ λ‘λ²ˆμ§Έ 방식을 κ³ λ €ν•œλ‹€.
3. N의 μ΅œλŒ“κ°’μ€ 9μ΄λ―€λ‘œ 2λͺ…을 μ„ νƒν•œ λͺ¨λ“  κ²½μš°λŠ” 9C2 = 36으둜 μž‘μœΌλ―€λ‘œ 완전탐색을 μ±„νƒν•œλ‹€.
4. μ˜€λ¦„μ°¨μˆœ 좜λ ₯μ΄λ―€λ‘œ μ˜€λ¦„μ°¨μˆœμ΄ κ°€λŠ₯ν•œ λ°°μ—΄λ‘œ 값을 μ €μž₯ν•œλ‹€.
μ½”λ“œ
import java.util.*

fun main() = with(Scanner(System.`in`)) {
    val list: ArrayList<Int> = ArrayList<Int>()	// λ‚œμŸμ΄μ˜ ν‚€λ₯Ό μž…λ ₯받을 λ°°μ—΄
	var sum: Int = 0    // ν˜„μž¬ ν‚€μ˜ 총합

	// 9λͺ…μ˜ ν‚€λ₯Ό μž…λ ₯λ°›κΈ°
    for(i in 0..8){
		val n = nextInt()
        sum += n
        list.add(n)
    }
    
    // μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 정리
    list.sort()
    
    // 두 λ‚œμž₯이의 ν‚€λ₯Ό λΉΌκΈ°
    for(i in 0..7){
        for (j in i+1..8){
			// 합이 100이 λ˜λŠ”μ§€ 확인
            sum -= (list.get(i) + list.get(j))
            if(sum == 100){
                list[i] = -1	// 좜λ ₯ν•˜μ§€ μ•Šμ„ 값을 ν‘œκΈ°ν•œλ‹€.
				list[j] = -1
                break
            }
            // μ •λ‹΅(100인 경우)κ°€ μ•„λ‹ˆλΌλ©΄ μˆ˜μ •ν•œ 값을 μ›λ³΅ν•œλ‹€.
            sum += (list.get(i) + list.get(j))
		}
    }
    
    // 좜λ ₯
    for(i in list){
        if(i != -1){
            println(i)
        }
    }
}
728x90
λ°˜μ‘ν˜•