본문 바로가기
백준

[백준] 1159번 : 농구 경기 – JAVA [자바]

by Hongwoo 2022. 8. 9.
반응형

https://www.acmicpc.net/problem/1159

 

1159번: 농구 경기

상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 1159번 농구 경기는 브론즈 2 난이도의 구현 및 문자열 문제이다. 이 문제에서는 선수의 수 N명이 주어지고 N명의 선수 이름들이 입력으로 주어진다. 선수 이름의 첫 글자가 똑같은 사람이 5명이 넘으면 선수를 선발할 수 있다. 이때, 선수를 선발할 수 없으면 PREDAJA를 출력하고 선발할 수 있으면 선발 가능한 이름의 첫 글자를 사전 순으로 출력하면 된다.

 

이 문제는 아스키코드를 이용해서 풀 수 있다. 우선 알파벳이 총 26개 있으므로 크기가 26인 int형 배열 arr을 선언해준다. 이 배열은 이름의 첫 글자가 몇 번 나왔는지를 저장할 것이다. 그리고 이 문제에서는 이름들은 모두 소문자로 주어진다고 나와있다. 소문자 a의 아스키코드는 97이다. 따라서 배열에 저장할 때 arr [첫 글자 - 97]을 이용해서 저장할 수 있다.

 

선수들의 이름들 입력받을 때 첫 글자는 char c = name.charAt(0)을 이용해서 구할 수 있다. 그리고 배열에 이 이름의 첫 글자가 몇 변 나왔는지를 저장해야 하므로 arr [c - 97]++를 해주면 된다.

 

선수의 이름들을 다 입력받고 나서 만약에 배열에서 count가 5 이상인 알파벳이 없으면 PREDAJA를 출력해주고 있으면 사전 순으로 첫 글자를 출력해주면 된다.

 

자세한 코드는 밑에 있다.

 


  • 코드

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] arr = new int[26];
        int n = Integer.parseInt(br.readLine());  //선수의 수
        boolean possible = false;  //다섯 명을 선발할 수 있는지
        for (int i = 0; i < n; i++) {
            String name = br.readLine();
            char c = name.charAt(0);  //첫 글자
            arr[c - 97]++;  //아스키 코드 이용
            if (arr[c - 97] == 5) possible = true;  //5명이 되면 5명을 선발할 수 있다
        }
        if (possible) {
            for (int i = 0; i < 26; i++) {
                if (arr[i] >= 5) System.out.print((char)(i+97));
            }
        } else {
            System.out.print("PREDAJA");
        }
    }
}

 

 

반응형

댓글