본문 바로가기

Algorithm

[Java] 백준 1159번 : 농구 경기

1. 문제

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

 

1159번: 농구 경기

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

www.acmicpc.net

2. 풀이

  • 소문자 알파벳 비교를 하기 위하여 26칸(알파벳 개수)을 가지고 있는 배열을 생성한다.
  • 테스터 케이스 입력 하고 각 입력 앞에 성 가져오기 위한 for문을 생성하고 안에 ch라는 변수에 charAt(0) - 97을 하여 하나씩 쪼개어 변수에 담아준다. (아스키코드표 소문자 a = 97, 소문자 기준으로 빼면 앞에 알파벳이 무엇인지 알 수 있기 위함이다.)
  • ch변수에 담은 값을 인덱스에 넣고 값을 하나씩 ++ 해준다.
  • 출력에 성을 붙여서 출력하기 위하여 StringBuilder를 생성한다.
  • 배열 길이 만큼 도는 for 문을 만들고 조건을 5와 같거나 보다 큰 값을 조건으로 주고 char 타입 출력을 위해 캐스팅을 해주고 i + 97을 해준다. (i + 97 은 위와 동일하게 소문자 알파벳을 찾기 위함이다.)
  • 5개 미만인 값을 출력하기 위해 조건을 만들어 출력한다.

3. 코드

package baekjoon;

import java.util.Scanner;

public class Q1159 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] arr = new int[26];

        int n = scanner.nextInt();

        for (int i = 0; i < n; i++) {
            String name = scanner.next();
            int ch = name.charAt(0) - 97; // 소문자 a = 97
            arr[ch]++;
        }
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] >= 5) {
                sb.append((char) (i + 97));
            }
        }
        if (sb.length() == 0) {
            System.out.print("PREDAJA");
        } else {
            System.out.print(sb);
        }
    }
}