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