BAEKJOON, 코딩테스트 관련

백준 1296번 팀이름정하기 - JAVA(TreeMap, 문자개수 추출방법: IntStream -> chars() 이용)

구름이팡팡 2022. 8. 24. 16:01
728x90
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;

public class Main {
	    public static void main(String[] args) throws IOException{
	    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	    	String name =  br.readLine(); //연두이름
	    	int n = Integer.parseInt(br.readLine()); //팀이름개수
	    	String teamName;
	    	double calRate;
	    	TreeMap<String, Double> rate = new TreeMap<String, Double>(); 
            	//같을 시 사전식 정렬 -> TreeMap을 이용해 사전에 정렬
	    	
                //팀이름 개수(n) 만큼 입력받아 문자개수 추출 후 우승확률 구해서 map에 put
                for(int i = 0; i < n; i++) {
                    teamName = br.readLine();
                    int L = (int) name.chars().filter(l -> l == 'L').count();
                    int O = (int) name.chars().filter(o -> o == 'O').count();
                    int V = (int) name.chars().filter(v -> v == 'V').count();
                    int E = (int) name.chars().filter(e -> e == 'E').count();
                    L += (int) teamName.chars().filter(l -> l == 'L').count();
                    O += (int) teamName.chars().filter(o -> o == 'O').count();
                    V += (int) teamName.chars().filter(v -> v == 'V').count();
                    E += (int) teamName.chars().filter(e -> e == 'E').count();
                    calRate = ((L+O) * (L+V) * (L+E) * (O+V) * (O+E) * (V+E)) % 100;
                    rate.put(teamName, calRate);
                    teamName = "";
                    L = 0;
                    O = 0;
                    V = 0;
                    E = 0;
                }
			
            	//value 정렬처리
	    	List<String> keySet = new ArrayList<String>(rate.keySet());
	    	keySet.sort((a,b) -> rate.get(b).compareTo(rate.get(a))); //map value 비교 내림차순 정렬
	    	
        	System.out.println(keySet.get(0));	    	
	    }	
}

 

* 체크할 점

- 정렬방법: TreeMap / keySet - List -> compareTo value로 비교

- 문자개수 추출방법: IntStream -> chars() 이용

 

* 의문점

: Scanner일 땐 for문이 비동기식이 되는건지... 같은 코드에 제대로 작동하지 않음

728x90