MUKER_DEV with iOS

[swift] λ°±μ€€ - 8979번: μ˜¬λ¦Όν”½ λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/BAEKJOON

[swift] λ°±μ€€ - 8979번: μ˜¬λ¦Όν”½

MUKER 2023. 7. 14. 09:56
문제 링크
 

8979번: μ˜¬λ¦Όν”½

μž…λ ₯의 첫 쀄은 κ΅­κ°€μ˜ 수 N(1 ≤ N ≤ 1,000)κ³Ό λ“±μˆ˜λ₯Ό μ•Œκ³  싢은 κ΅­κ°€ K(1 ≤ K ≤ N)κ°€ λΉˆμΉΈμ„ 사이에 두고 주어진닀. 각 κ΅­κ°€λŠ” 1λΆ€ν„° N μ‚¬μ΄μ˜ μ •μˆ˜λ‘œ ν‘œν˜„λœλ‹€. 이후 N개의 각 μ€„μ—λŠ” μ°¨λ‘€λŒ€λ‘œ 각

www.acmicpc.net


문제

μ˜¬λ¦Όν”½μ€ 참가에 μ˜μ˜κ°€ μžˆκΈ°μ— κ³΅μ‹μ μœΌλ‘œλŠ” κ΅­κ°€κ°„ μˆœμœ„λ₯Ό μ •ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·ΈλŸ¬λ‚˜, λ§Žμ€ μ‚¬λžŒλ“€μ΄ μžμ‹ μ˜ κ΅­κ°€κ°€ μ–Όλ§ˆλ‚˜ 잘 ν•˜λŠ”μ§€μ— 관심이 많기 λ•Œλ¬Έμ— λΉ„κ³΅μ‹μ μœΌλ‘œλŠ” κ΅­κ°€κ°„ μˆœμœ„λ₯Ό μ •ν•˜κ³  μžˆλ‹€. 두 λ‚˜λΌκ°€ 각각 얻은 금, 은, 동메달 μˆ˜κ°€ 주어지면, 보톡 λ‹€μŒ κ·œμΉ™μ„ 따라 μ–΄λŠ λ‚˜λΌκ°€ 더 μž˜ν–ˆλŠ”μ§€ κ²°μ •ν•œλ‹€.

  1. κΈˆλ©”λ‹¬ μˆ˜κ°€ 더 λ§Žμ€ λ‚˜λΌ 
  2. κΈˆλ©”λ‹¬ μˆ˜κ°€ κ°™μœΌλ©΄, 은메달 μˆ˜κ°€ 더 λ§Žμ€ λ‚˜λΌ
  3. 금, 은메달 μˆ˜κ°€ λͺ¨λ‘ κ°™μœΌλ©΄, 동메달 μˆ˜κ°€ 더 λ§Žμ€ λ‚˜λΌ 

각 κ΅­κ°€λŠ” 1λΆ€ν„° N μ‚¬μ΄μ˜ μ •μˆ˜λ‘œ ν‘œν˜„λœλ‹€. ν•œ κ΅­κ°€μ˜ λ“±μˆ˜λŠ” (μžμ‹ λ³΄λ‹€ 더 μž˜ν•œ λ‚˜λΌ 수) + 1둜 μ •μ˜λœλ‹€. λ§Œμ•½ 두 λ‚˜λΌκ°€ 금, 은, 동메달 μˆ˜κ°€ λͺ¨λ‘ κ°™λ‹€λ©΄ 두 λ‚˜λΌμ˜ λ“±μˆ˜λŠ” κ°™λ‹€. 예λ₯Ό λ“€μ–΄, 1번 κ΅­κ°€κ°€ κΈˆλ©”λ‹¬ 1개, 은메달 1개λ₯Ό μ–»μ—ˆκ³ , 2번 ꡭ가와 3번 κ΅­κ°€κ°€ λͺ¨λ‘ 은메달 1개λ₯Ό μ–»μ—ˆμœΌλ©°, 4번 κ΅­κ°€λŠ” 메달을 얻지 λͺ»ν•˜μ˜€λ‹€λ©΄, 1번 κ΅­κ°€κ°€ 1λ“±, 2번 ꡭ가와 3번 κ΅­κ°€κ°€ 곡동 2λ“±, 4번 κ΅­κ°€κ°€ 4등이 λœλ‹€. 이 경우 3등은 μ—†λ‹€. 

각 κ΅­κ°€μ˜ 금, 은, 동메달 정보λ₯Ό μž…λ ₯λ°›μ•„μ„œ, μ–΄λŠ κ΅­κ°€κ°€ λͺ‡ 등을 ν–ˆλŠ”μ§€ μ•Œλ €μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 

μž…λ ₯

μž…λ ₯의 첫 쀄은 κ΅­κ°€μ˜ 수 N(1 ≤ N ≤ 1,000)κ³Ό λ“±μˆ˜λ₯Ό μ•Œκ³  싢은 κ΅­κ°€ K(1 ≤ K ≤ N)κ°€ λΉˆμΉΈμ„ 사이에 두고 주어진닀. 각 κ΅­κ°€λŠ” 1λΆ€ν„° N μ‚¬μ΄μ˜ μ •μˆ˜λ‘œ ν‘œν˜„λœλ‹€. 이후 N개의 각 μ€„μ—λŠ” μ°¨λ‘€λŒ€λ‘œ 각 κ΅­κ°€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜μ™€ 이 κ΅­κ°€κ°€ 얻은 금, 은, λ™λ©”λ‹¬μ˜ μˆ˜κ°€ λΉˆμΉΈμ„ 사이에 두고 주어진닀. 전체 메달 수의 총합은 1,000,000 μ΄ν•˜μ΄λ‹€.

좜λ ₯

좜λ ₯은 단 ν•œ 쀄이며, μž…λ ₯받은 κ΅­κ°€ K의 λ“±μˆ˜λ₯Ό ν•˜λ‚˜μ˜ μ •μˆ˜λ‘œ 좜λ ₯ν•œλ‹€. λ“±μˆ˜λŠ” λ°˜λ“œμ‹œ λ¬Έμ œμ—μ„œ μ •μ˜λœ 방식을 따라야 ν•œλ‹€. 

μ„œλΈŒνƒœμŠ€ν¬

번호 배점 μ œν•œ
1 8 예제 μž…λ ₯, 좜λ ₯
2 12 N = 2
3 20 λͺ¨λ“  κ΅­κ°€μ˜ 은메달 및 동메달 νšλ“ μˆ˜λŠ” 0
4 25 N ≤ 500
5 35 좔가적인 μ œμ•½ 쑰건은 μ—†λ‹€.

예제


성곡 풀이

import Foundation

let NK = readLine()!.split { $0 == " " }.map { Int($0)! }, N = NK[0], K = NK[1]
var medals = [[Int]]()

for _ in 0..<N {
    medals.append(readLine()!.split { $0 == " " }.map { Int($0)! })
}

medals.sort { // μˆœμœ„ μ •λ ¬ν•˜κΈ°
    $0[1] == $1[1] ? $0[2] == $1[2] ? $0[3] > $1[3] : $0[2] > $1[2] : $0[1] > $1[1]
}

for i in 0..<N {
    if medals[i][0] == K {
        var index = i
        while true {
            guard index > 0 else {
                print(1)
                break
            } // μ•žμ˜ 메달과 κ°™λ‹€λ©΄ index -1 ν•˜κ³  λ‹€μ‹œ whileλ¬Έ 돌리기
            if medals[index-1][1...] == medals[index][1...] { index -= 1 }
            else {
                print(index+1)
                break
            }
        }
        break
    }
}

풀이 ν‚€μ›Œλ“œ

  • 금,은,동 메달에 따라 μˆœμœ„λ₯Ό μ •λ¦¬ν•œ λ’€, K의 μΈλ±μŠ€μ—μ„œ λΆ€ν„° μ•ž μˆœμœ„μ˜ 메달 μˆ˜κ°€ κ°™λ‹€λ©΄ μ•ž μˆœμœ„μ˜ 인덱슀λ₯Ό λ”°λ₯΄κ³  λ‹€μ‹œ 반볡 ν•©λ‹ˆλ‹€.
  • μ•ž μˆœμœ„μ˜ 메달과 μƒμ΄ν•œ 메달이 λ‚˜μ˜¬ λ•ŒκΉŒμ§€ λ°˜λ³΅ν•˜μ—¬, μƒμ΄ν•œ λ©”λ‹¬μ˜ μˆ˜κ°€ λ‚˜μ˜¨λ‹€λ©΄ ν˜„μž¬ index에 +1(인덱슀λ₯Ό κ΅¬ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ μˆœμœ„λ₯Ό κ΅¬ν•˜λŠ” 것이기 λ•Œλ¬Έμ—)ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.