코딩테스트/백준
[코테] 백준 29813번 : 최애의 팀원 (java)
developer of the night sky
2023. 9. 24. 22:58
https://www.acmicpc.net/problem/29813
29813번: 최애의 팀원
2학년이 된 김한양은 한양대학교의 3대 관문 중 하나인 전문학술영어를 수강하게 됐다. 그런데, 갑자기 올해부터는 전학영이 2인1조 팀플로 진행된다는 공지가 떴다. 팀 구성은 자유이지만, 7수
www.acmicpc.net
❓문제
🔅해석
처음에 문제 해석이 어려웠는데 내가 이해한 바로는
1. 2번째 열부터 주어진 알파벳은 팀원을 찾는 학생들이며, 숫자는 n번째 팀원을 찾았다는 것이다.
2. 팀원이 아닐 경우 앞사람이 맨 뒤로 넘어가므로 팀원을 찾는 학생의 순서는 계속 바뀐다.
예제 입력 1에서,
A가 3번째 팀원을 찾기 위해 B,C,D,E 가 줄을 선다.
A가 3번째 팀원을 찾기 위해 B,C를 뒤로 보냈고 3번째 학생인 D와 팀을 맺는다.
그럼 팀원을 찾는 다음 학생은 E이다.
E도 4번째 팀원을 찾기 위해 B,C를 번가아가면서 뒤로 보냈고 4번째 학생은 C로써 C와 팀을 맺어 떠난다.
그럼, 남은 학생은 B로써 김한양과 팀원이 된다.
⭕정답 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//학생 수
int N = Integer.parseInt(br.readLine());
//학생과 n번째 팀원
HashMap<String, Integer> map = new HashMap<String, Integer>();
//학생의 순서를 담는 큐(HashMap에는 순서 개념이 없어 큐로 학생을 순서대로 담는다.)
Queue<String> que = new LinkedList<String>();
StringTokenizer st;
for (int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
String str = st.nextToken();
int num = Integer.parseInt(st.nextToken());
map.put(str, num);
que.add(str);
}
while(que.size()>1) {
//팀원을 뽑을 학생
String student = que.poll();
//그 학생의 n번째 팀원
int n = map.get(student);
//n번째 팀원을 찾기 위해 앞사람을 맨 뒤로 보낸다.
for (int i=0; i<n-1; i++) {
que.add(que.poll());
}
//학생의 n번째 팀원을 찾아 꺼낸다.
que.poll();
}
//나머지 인원은 김한양의 팀원
System.out.println(que.poll());
}
}
❗결과