728x90
https://www.acmicpc.net/problem/1380
문제
파스칼 고등학교에 다니는 많은 여학생들은 규정에 없는 귀걸이를 착용한 채 도망 다닙니다. 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
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 2447번: 별 찍기-10 (0) | 2021.12.30 |
---|---|
[백준/BOJ] 11656번: 접미사 배열 (0) | 2021.12.29 |
[백준/BOJ] 1251번: 단어 나누기 (0) | 2021.12.22 |
[백준/BOJ] 1343번: 폴리오미노 (0) | 2021.12.19 |
[백준/BOJ] 1021번: 회전하는 큐 (0) | 2021.12.15 |
댓글