Uknow's Lab.
article thumbnail

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

 

1380번: 귀걸이

입력은 번호를 가진 시나리오들로 구성됩니다. 시나리오 번호는 1부터 순서대로 증가하고, 각 시나리오는 아래의 내용을 포함합니다. 한 줄에 귀걸이를 압수당한 여학생의 수, n (1 ≤ n ≤ 100)이

www.acmicpc.net

 

난이도 : 실버 5
태그 : 구현, 문자열

 

 

설명

학생의 이름이 두 번 나오면 귀걸이를 돌려 받은 것이고,

한 번만 나온다면 귀걸이를 압수당하고 돌려받지 못한 것입니다.

 

저는 Student라는 클래스를 하나 만들어 학생의 이름과 이름을 불린 횟수를 체크하였습니다.

 

 

소스코드

import java.io.BufferedReader
import java.io.InputStreamReader

data class Student(var name: String, var cnt: Int)

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    var cnt = 0
    while (true) {
        cnt++

        val n = br.readLine().toInt()
        if (n == 0) break

        val students = Array(n) { Student("", 0) }

        repeat(n) {
            val name = br.readLine()
            students[it].name = name
        }

        repeat(2 * n - 1) {
            val line = br.readLine().split(" ")
            val idx = line[0].toInt() - 1

            students[idx].cnt++
        }

        for (i in 0 until n) {
            if (students[i].cnt == 1) {
                println("$cnt ${students[i].name}")
                break
            }
        }
    }
}

 

한 명만 귀걸이를 돌려받지 못하므로,

이름은 총 2 * (학생수) - 1 번 불립니다.

각 학생의 이름이 나온 횟수를 카운트하고,

이름이 1번 불린 학생(귀걸이를 돌려받지 못한 학생)을 출력합니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.