알고리즘

[백준] 문제 28114번 : 팀명 정하기 - JAVA

DoosanBaek 2024. 12. 2. 17:06

[링크] : https://www.acmicpc.net/problem/28114


💎 문제 분석 & 제약 조건

 

문제 분석 :

 

3명의 팀원 정보(해결한 문제 수, 입학년도, 성)를 입력받음


두 가지 방식으로 팀 이름을 생성해야 함

 

제약 조건 : 

 

입력은 항상 3명의 팀원 정보로 고정됨


각 줄에 문제 수, 입학년도, 성이 순서대로 주어짐

 


🚀 의사 결정

 

 1.  Member 클래스 생성: 팀원 정보를 객체로 관리하기 위함


 2.  Comparable 인터페이스 구현: 입학년도 비교를 위해 사용


 3.  두 가지 정렬 방식 사용:


 4.  Collections.sort(): 입학년도 기준 정렬


 5.  members.sort(): 해결한 문제 수 기준 정렬


6.  StringBuilder 사용: 문자열 연산의 효율성을 위해 선택

 


📜 소스코드(Java)

import java.util.*;

public class Main {
    // Member 클래스: 팀원 정보를 저장하고 비교하기 위한 클래스
    static class Member implements Comparable<Member> {
        int problems;    // 해결한 문제 수
        int year;        // 입학년도
        String surname;  // 성

        // 생성자: 팀원 정보 초기화
        Member(int problems, int year, String surname) {
            this.problems = problems;
            this.year = year;
            this.surname = surname;
        }

        // 입학년도의 뒤 두 자리를 기준으로 비교
        @Override
        public int compareTo(Member other) {
            return Integer.compare(this.year % 100, other.year % 100);
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Member> members = new ArrayList<>();

        // 3명의 팀원 정보 입력 받기
        for (int i = 0; i < 3; i++) {
            int problems = scanner.nextInt();
            int year = scanner.nextInt();
            String surname = scanner.next();
            members.add(new Member(problems, year, surname));
        }

        // 첫 번째 방법: 입학년도 순으로 정렬
        Collections.sort(members);
        StringBuilder teamName1 = new StringBuilder();
        for (Member member : members) {
            // 입학년도의 뒤 두 자리를 팀 이름에 추가
            teamName1.append(String.format("%02d", member.year % 100));
        }

        // 두 번째 방법: 해결한 문제 수 내림차순으로 정렬
        members.sort((a, b) -> Integer.compare(b.problems, a.problems));
        StringBuilder teamName2 = new StringBuilder();
        for (Member member : members) {
            // 성의 첫 글자를 팀 이름에 추가
            teamName2.append(member.surname.charAt(0));
        }

        // 결과 출력
        System.out.println(teamName1);
        System.out.println(teamName2);
    }
}