PS(Problem Solving)/BOJ

[백준/BOJ] 1380번: 귀걸이

JunsuKim 2021. 12. 27.
728x90

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

 

1380번: 귀걸이

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

www.acmicpc.net

문제

파스칼 고등학교에 다니는 많은 여학생들은 규정에 없는 귀걸이를 착용한 채 도망 다닙니다. Sneddon 교감선생님은 흔들거리는 긴 빨간 귀걸이들을 볼 때마다 압수합니다.

교감선생님은 귀걸이를 압수당한 여학생들을 숫자를 매겨 리스트를 작성하고 있습니다. 그리고 압수한 귀걸이 뒤쪽에 여학생 번호와 마음대로 선택한 'A' 또는 'B'를 함께 적어두었습니다.

모든 정규 일과와 방과 후 수업의 감금이 끝나면, 여학생들은 교감선생님을 찾아와 귀걸이를 돌려받습니다. 불행하게도 어느 날, 교감선생님은 귀걸이가 든 봉투를 잃어버렸고, 하나를 끝내 찾지 못했습니다.

귀걸이를 받지 못해 화난 소녀의 이름을 교감선생님께 알려주세요.

입력

입력은 번호를 가진 시나리오들로 구성됩니다. 시나리오 번호는 1부터 순서대로 증가하고, 각 시나리오는 아래의 내용을 포함합니다.

  • 한 줄에 귀걸이를 압수당한 여학생의 수, n (1 ≤ n ≤ 100)이 주어집니다.
  • 다음 n줄에 걸쳐 여학생들의 이름(최대 60자)이 주어집니다.
  • 다음 2n − 1줄에 여학생 번호와 'A' 또는 'B'가 공백을 사이에 두고 주어집니다. 번호는 교감선생님의 여학생 이름 리스트와 순서가 일치합니다. 즉, 1은 첫 번째로 압수당한 여학생입니다. 여학생 번호는 최대 2번 등장하며, 두 번째로 등장할 때는 첫 번째 경우와 다른 'A' 또는 'B'가 뒤에 적힙니다.
    번호가 처음 등장하는 것은 압수되었음을, 두 번째로 등장하는 것은 돌려받았음을 의미합니다.

'0'을 마지막 줄로 하여 입력이 종료됩니다. '0'은 처리하지 않습니다.

해설

학생의 이름을 담을 배열과 압수를 당했는지에 대한 배열을 만들었다.

입력을 보면 학생의 번호가 2번 불릴 시 압수당한 귀걸이는 돌려준 것이므로 A냐 B냐는 신경을 쓸 필요가 없다.

번호가 불릴 때마다 압수를 당했는지에 대한 배열의 각 위치에 ++를 해줘 확인을 해봤을 때 1번만 불린 번호에 대한

학생의 이름을 출력하면 된다.

소스 코드

import java.lang.StringBuilder
import java.util.*

fun main() {
    val sb = StringBuilder()
    var scenario = 1
    while(true) {
        val n = readLine()!!.toInt()
        if(n == 0) break
        if(scenario != 1) sb.append("\n")
        val list: Array<String> = Array(101) {""}
        val confiscate: Array<Int> = Array(101) {0}
        for(i in 0 until n) list[i] = readLine()!!
        for(i in 0 until 2 * n - 1) {
            val st = StringTokenizer(readLine())
            val studentNumber = st.nextToken().toInt()
            confiscate[studentNumber-1]++
        }
        for(i in 0 until n) if(confiscate[i] == 1) sb.append("$scenario ${list[i]}")
        scenario++
    }
    println(sb.toString())
}
728x90

댓글