[백준] 1159 농구 경기 JAVA

·2024년 3월 11일

1일1백준 -Java-

목록 보기
7/60

문제

상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작했다. 상근이도 농구장을 청소하면서 감독이 되기 위해 가져야할 능력을 공부해나갔다. 서당개 3년이면 풍월을 읊듯이 상근이는 점점 감독으로 한 걸음 다가가고 있었다. 어느 날 그에게 지방의 한 프로농구팀을 감독할 기회가 생기게 되었다. 그는 엄청난 지도력을 보여주며 프로 리그에서 우승을 했고, 이제 국가대표팀의 감독이 되었다.

내일은 일본과 국가대표 친선 경기가 있는 날이다. 상근이는 내일 경기에 나설 선발 명단을 작성해야 한다.

국가대표팀의 감독이 된 이후에 상근이는 매우 게을러졌다. 그는 선수의 이름을 기억하지 못하고, 각 선수의 능력도 알지 못한다. 따라서, 누가 선발인지 기억하기 쉽게 하기 위해 성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다.

상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다.

입력

첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다)

출력

상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. PREDAJA는 크로아티아어로 항복을 의미한다. 선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력한다.

예제 입력

18
babic
keksic
boric
bukic
sarmic
balic
kruzic
hrenovkic
beslic
boksic
krafnic
pecivic
klavirkovic
kukumaric
sunkic
kolacic
kovacic
prijestolonasljednikovi

예제 출력

bk

내가 했던 풀이 방식

  1. 선수의 수만큼 성을 입력받는다. (이때 필요한 건 charAt(0)이므로, String 배열이 아닌 char 배열로 받아준다.)
  2. 배열을 정렬해준다.
  3. 현재 값을 first_name[0]으로 두고 반복문을 돌린다.
  4. while문에서 현재 값과 first_name[index]를 비교해주고, 같을 경우 count를 +1해준다. 만약 count값이 5가 됐을 경우, 출력할 문자열에 first_name[index]를 추가해준다.
  5. 현재 값과 first_name[index]가 다를 경우, 현재 값을 first_name[index]로 바꿔주고 count를 초기화해준다. (이때, count는 1로 초기화해주어야 한다. (현재 index도 포함해야하기 때문에)
  6. 반복문이 끝난 후, 문자열이 비어있을 경우("") PREDAJA를 출력하고, 비어있지 않을 경우 문자열을 출력해준다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int number = Integer.parseInt(br.readLine());

        char[] first_name = new char[number];
        for(int i=0; i<number; i++) {
            first_name[i] = br.readLine().charAt(0);
        }

        Arrays.sort(first_name);
        char check = first_name[0];
        int count= 0;
        int index = 0;
        String answer = "";
        while(true) {
            if(index>=number) break;

            if(check!=first_name[index]) {
                check = first_name[index];
                count = 1;
            } else {
                count = count + 1;
                if(count==5) {
                    answer += first_name[index];
                }
            }
            index++;
        }

        if (answer.equals("")) {
            System.out.print("PREDAJA");
        } else {
            System.out.print(answer);
        }

    }   
}

회고

브론즈 마지막 문제까지 끝냈다. 이제 기초적인 부분은 많은 푼제를 풀어봤으니 실버 문제를 풀면서 부족한 부분을 찾고 정리해서 골드까지 후다닥 가봐야겠다. 실버 2~3까지 가기 전까지는 하루 2백준을 유지해야겠다.

profile
Frontend🍓

0개의 댓글