Study/알고리즘

백준 1159번 - 농구 경기 JAVA

토기발 2022. 7. 30. 00:54

이번 문제는 저번에 풀었던 단어공부 문제와 비슷하게 한글자를 떼어서 a를 빼고, 그걸 알파벳 배열 자리에 넣는 방식으로 진행했다.

 

먼저 이름들을 리스트에 담고, 리스트를 돌리면서 첫글자를 떼서 알파벳 자리에 넣고 중복되는 알파벳이 5개가 넘으면 출력을 할 수 있게 한다. 그런데 이번엔 가장 중복이 많은 글자가 아니라 5개가 넘는건 모두 출력하기 때문에 문자열+문자열을 해야한다. 이걸 간편하게 해줄 수 있는 메소드가 StringBuilder 이다. 문자끼리 더하기 자체는 가능하지만 성능적으로 좋지 않기 때문에 사용하는 메소드인데, 값을 넣을 때는 .append()로 넣고, 값을 꺼낼 때는 StringBuilder나 객체.toString() 으로 호출한다.

 


 

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		int N = in.nextInt(); //인원수
		char apb[]=new char[26]; //알파벳 순서 배열
		List<String> players = new ArrayList<>(); //이름들 담을 리스트
		for(int i = 0; i < N; i++) {
			players.add(in.next());	//이름을 리스트에 담음
		}
		for(String player : players) { //이름들을 하나씩 돌림
			int first = player.charAt(0)-'a'; //첫번째 글자 자리수
			apb[first]++; //중복글자라면 값을 늘려준다
		}
		StringBuilder group = new StringBuilder(); //문자+문자
		for(int i = 0; i < 26; i++) { //알파벳 자리에서 하나씩 꺼내기
			if (apb[i]>=5) {
			group.append((char)(i+'a')); //5가 넘으면 group에 넣는다
			}
		}			
			if (group.toString() == "") { //5가 넘는 수가 없다면?
				System.out.println("PREDAJA"); //해당 글자 출력
		}
			System.out.println(group); //5가 넘는 알파벳들을 이어서 출력한다
	}
}

 

설명은 주석에...

 

 

위에 쓴 대로 단어연습과 똑같은 풀이가 나왔는데, 이렇게 저번에 배운걸 다음에 써먹을 수 있다는게 기쁘다. 앞으로 문제를 계속 풀면서 비슷한 문제를 전에 풀었던 적이 있어서 다음에는 더 빨리 풀거나 해결법이 바로 생각나는 일이 많아지길 바란다.