Java/Java 알고리즘

백준 20299번 3대측정 JAVA 구현해보기

kimc 2021. 11. 20. 23:49

```

백준 20299번 3대 측정 JAVA 구현해보기

```

이번 글을 통해 배워갈 내용

  1.  백준 20299번 풀이

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

 

20299번: 3대 측정

첫째 줄에 정수 $N$, $K$, $L$이 주어진다. $N$은 팀의 수, $K$는 팀원 $3$명의 레이팅 합에 대한 클럽 가입 조건, $L$은 개인 레이팅에 대한 클럽 가입 조건이다. ($1 \leq N \leq 500\ 000$, $0 \leq K \leq 12\ 000$, $

www.acmicpc.net

 

 

백준 20299번 3대 측정은

난이도 브론즈 등급의 문제로서

 

팀의 수 N

팀에 대한 최소 가입 가능한 레이팅 점수 K

개인에 대한 최소 가입 가능한 레이팅 점수 L을 입력받을 때

 

 

각 팀에 세명씩 있다고 가정할 때

팀의 수만 큼 입력을 받고

 

첫째 줄에 가입 가능한 팀의 수

둘째 줄에 입력받은 순서대로 가입 가능한 팀의 점수를 공백과 함께 출력하면 되는

 

문제입니다.

 


30분 정도 위에 링크를 방문하셔서 풀어보시고

안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.


 

 

각 팀별로 입력받은 점수 리스트를 임시 리스트에 저장하고

해당 리스트에 람다와 스트림을 걸어서

조건에 부합하는지 확인 후 

조건에 해당하면 출력에 추가해주면 되는 문제입니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int teamCnt = Integer.parseInt(st.nextToken());
        int minRatingPerTeam = Integer.parseInt(st.nextToken());
        int minRatingPerUser = Integer.parseInt(st.nextToken());
        int candidateTeamCnt = 0;
        List<Integer> candidateTeamUserList = new ArrayList<>();


        for (int idx = 0; idx < teamCnt; idx++) {

            // 팀에 속한 인원들의 점수들을 리스트에 저장한다.
            List<Integer> teamRatingList = Arrays.stream(br.readLine().trim().split(" ")).map(Integer::parseInt).collect(Collectors.toList());

            // 팀의 레이팅 합을 구한다.
            final int teamRatingSum = teamRatingList.stream().mapToInt(Integer::intValue).sum();

            // 팀의 레이팅 합이 기준합 이상이면
            if (teamRatingSum >= minRatingPerTeam) {

                // 팀원중에 정해진 레이팅 이하인 팀원이 없다면
                Optional<Integer> lowRating = teamRatingList.stream().filter(rating -> rating < minRatingPerUser).findFirst();
                if (lowRating.isEmpty()) {

                    // VIP 클럽의 가능한 팀의 수를 중가한다.
                    candidateTeamCnt++;

                    // VIP 클럽에 가입 가능한 팀의 점수들을 추가한다.
                    candidateTeamUserList.addAll(teamRatingList);
                }
            }
        }

        // VIP 클럽에 가입이 가능한 팀의 수를 출력한다.
        System.out.println(candidateTeamCnt);

        // VIP 회원들의 레이팅을 입력받은 순서대로 공백으로 구분해 하나씩 출력한다.
        System.out.println(candidateTeamUserList.stream().map(Object::toString).collect(Collectors.joining(" ")));
    }
}

 

 

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 

참조 및 인용

 


 

728x90