백준 20006번 - 랭킹전 대기열

박진형·2021년 9월 5일
0

algorithm

목록 보기
88/111

문제 풀이

간단한 구현문제.

차례대로 들어갈 수 있는 방을 찾고 들어갈 수 있는 방이없다면 방을 만든다.
이제 각 방을 출력할건데 방의 인원은 사전순으로 정렬을 해야한다.
먼저 방이 꽉찼다면 Started!, 꽉 차지 않았다면 Waiting!을 먼저 출력하고, 닉네임을 사전순으로 정렬해서 각 인원들을 출력하면 된다.

문제 링크

boj/20006

소스코드

PS/20006.java

       import java.io.*;
    import java.util.*;


    public class Main {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));


        static class Room
        {
            List<User> users = new ArrayList<>();


        }

        static public class User implements  Comparable<User>
        {
            int level;
            String nickName;

            public User(int level, String nickName) {
                this.level = level;
                this.nickName = nickName;
            }



            @Override
            public int compareTo(User o) {
                return nickName.compareTo(o.nickName);
            }
        }

        public static void main(String[] args) throws IOException {
            StringTokenizer st = new StringTokenizer(br.readLine());

            int p = Integer.parseInt(st.nextToken());
            int m = Integer.parseInt(st.nextToken());
            ArrayList<Room> rooms = new ArrayList<>();
            for(int i=0;i<p;i++)
            {
                st = new StringTokenizer(br.readLine());
                int l= Integer.parseInt(st.nextToken());
                String  n =st.nextToken();
                boolean flag= false;
                for (Room room : rooms) {
                    if(room.users.size() >=m)
                        continue;
                    if(!room.users.isEmpty() && room.users.get(0).level - 10 <= l && l <= room.users.get(0).level + 10)
                    {
                        flag= true;
                        room.users.add(new User(l,n));
                        break;
                    }
                }
                if(!flag)
                {
                    Room room = new Room();
                    room.users.add(new User(l,n));
                    rooms.add(room);

                }
            }

            for (Room room : rooms) {
                Collections.sort(room.users);
                if(room.users.size() == m )
                    bw.write("Started!\n");
                else
                    bw.write("Waiting!\n");
                for(int i=0;i<room.users.size();i++)
                {
                    int level = room.users.get(i).level;
                    String nickName = room.users.get(i).nickName;

                    bw.write(Integer.toString(level) + " " + nickName+"\n");
                }
            }
            bw.flush();

        }


    }

0개의 댓글