https://www.acmicpc.net/problem/16165
문제
정우는 소문난 걸그룹 덕후이다. 정우의 친구 준석이도 걸그룹을 좋아하지만 이름을 잘 외우지 못한다는 문제가 있었다. 정우는 친구를 위해 걸그룹 개인과 팀의 이름을 검색하여 외우게 하는 퀴즈 프로그램을 만들고자 한다.
입력
첫 번째 줄에는 총 입력 받을 걸그룹의 수 N(0 < N < 100)과 맞혀야 할 문제의 수 M(0 < M < 100)을 입력받는다.
두 번째 줄부터는 각 걸그룹마다 팀의 이름, 걸그룹의 인원 수, 멤버의 이름을 한 줄씩 차례대로 입력받는다. 팀과 멤버의 이름은 최대 100글자이며, 모든 글자는 알파벳 소문자이다. 하나의 걸그룹이나 서로 다른 두 걸그룹에 이름이 같은 두 멤버가 있는 경우는 없다.
그 다음 줄부터는 M개의 퀴즈를 입력받는다. 각각의 퀴즈는 두 줄로 이루어져 있으며, 팀의 이름이나 멤버의 이름이 첫 줄에 주어지고 퀴즈의 종류를 나타내는 0 또는 1이 두 번째 줄에 주어진다. 퀴즈의 종류가 0일 경우 팀의 이름이 주어지며, 1일 경우 멤버의 이름이 주어진다.
출력
첫 번째 줄부터 차례대로 퀴즈에 대한 답을 출력한다. 퀴즈의 종류가 0일 경우 해당 팀에 속한 멤버의 이름을 사전순으로 한 줄에 한 명씩 출력한다. 퀴즈의 종류가 1일 경우 해당 멤버가 속한 팀의 이름을 출력한다.
해설
팀의 이름과 그 팀의 멤버를 저장해야 하므로 Map을 사용하였다.
Map의 Key에는 그룹 이름, Value에는 멤버를 저장한다.
멤버는 ArrayList로 저장하여 Map에 넣었는데, 따라서 Map<String, ArrayList<String>>과 같이 Map이 선언된다.
퀴즈에서 멤버를 출력해야할 때 사전 순으로 출력해야 하므로 정렬을 해준 후 Map에 저장하자.
맵에 그룹명과 멤버 저장이 끝났다면 퀴즈의 종류에 따라 출력을 해주면 된다.
0이라면 그 팀의 멤버를 호출하므로 getValue()를 통해 멤버들을 출력시킨다.
1일 땐 멤버가 속해있는 그룹을 출력하면 되는데, 여기서 어려움을 겪었었다.
각 그룹의 value값인 멤버들에 찾고자 하는 멤버가 있는지를 확인해야 한다.
이를 위해 앞에 그룹명을 저장할 배열을 만들고, if문을 통해 멤버가 속해 있는지를 찾아주었다.
if(map.getValue(group[i]).contains(quiz))
설명만으로 이해가 잘 안될 거 같다...
코드를 보며 이해를 하는데 도움이 되면 좋겠다.
소스 코드
import java.util.*
import kotlin.collections.HashMap
fun main() = with(System.`in`.bufferedReader()) {
val (n, m) = readLine().split(" ").map { it.toInt() }
val map = HashMap<String, ArrayList<String>>()
val group = Array(n) { "" }
repeat(n) { i ->
val groupName = readLine()
group[i] = groupName
val member = readLine().toInt()
val list = ArrayList<String>()
repeat(member) {
list.add(readLine())
}
list.sort()
map[groupName] = list
}
repeat(m) {
val quiz = readLine()
val kind = readLine().toInt()
if(kind == 0) {
for(i in map.getValue(quiz)) println(i)
}
else {
for(i in 0 until n) {
if(map.getValue(group[i]).contains(quiz)) {
println(group[i])
break
}
}
}
}
}
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 15975번: 화살표 그리기 (0) | 2022.02.22 |
---|---|
[백준/BOJ] 2792번: 보석 상자 (0) | 2022.02.21 |
[백준/BOJ] 2659번: 십자카드 문제 (0) | 2022.02.21 |
[백준/BOJ] 13414번: 수강신청 (0) | 2022.02.20 |
[백준/BOJ] 2910번: 빈도 정렬 (0) | 2022.02.20 |
댓글