본문 바로가기
BaekJoon/Bronze

[BOJ/JAVA] 백준 20299 : 3대 측정 (자바)

by HoonSikE 2022. 3. 25.
반응형
SMALL
문제 정보
  문제명   - 3대 측정
  난이도   - 브론즈 II
문제 번호 - 20299번

문제 링크

BOJ_B2_20299_3대_측정

 

20299번: 3대 측정

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

www.acmicpc.net


문제
웨이트 트레이닝에서의 3대 측정은 스쿼트, 벤치프레스, 데드리프트의 중량을 측정하는 것이다. 하지만 세 명이 한 팀을 이루어 출전하는 전국 대학생 프로그래밍 대회(ICPC)의 참가자들은 다소 독특한 방법으로 3대를 측정하는데, 바로 팀원 각각의 실력을 수치로 나타내 주는 ‘코드포스 레이팅’을 비교하는 것이다.
웨이트 트레이닝계에는 3대 중량을 합쳐 500kg를 넘지 못하는 사람은 ‘언더아머’ 브랜드의 옷을 입지 못한다는 암묵적인 룰이 있으며. 이들을 단속하는 ‘언더아머 단속반’이 존재한다는 소문도 있다. Sogang ICPC Team은 이를 벤치마킹해 팀원 3명의 코드포스 레이팅의 합이 K 미만인 팀은 가입할 수 없는 VIP 클럽을 만들고자 한다.
하지만 이런 조건에서는 세 명 중 한 명의 레이팅이 현저히 낮더라도 나머지 두 명의 레이팅이 충분히 높다면 세 명이 모두 VIP 클럽에 가입할 수 있게 된다. 클럽에 가입하는 사람들은 모두 일정 수준 이상이어야겠다고 판단한 학회장 임지환은 모든 팀원의 레이팅이 L 이상이고, 팀원 세 명의 레이팅의 합이 K 이상인 팀만이 가입할 수 있게 하였다.
학회 일과 연합 일에 치여 사는 지환이는 VIP 클럽의 회원 관리까지 할 시간이 없다. 지환이를 위해 지원자 중 VIP 클럽에 가입할 수 있는 팀의 수를 구하고, VIP 회원들의 레이팅을 출력해 보자.

입력
첫째 줄정수 N, K, L이 주어진다. N은 팀의 수, K는 팀원 3명의 레이팅 합에 대한 클럽 가입 조건, L은 개인 레이팅에 대한 클럽 가입 조건이다. (1≤N≤500 000, 0≤K≤12 000, 0≤L≤4 000)
둘째 줄부터 N개 줄에 VIP 클럽에 신청한 팀의 팀원들의 레이팅 정보를 나타내는 정수 x1, x2, x3이 한 줄에 한 팀씩 주어진다. (0≤x1,x2,x3≤4 000)

출력
첫째 줄VIP 클럽에 가입이 가능한 팀의 수를 출력한다.
둘째 줄VIP 회원들의 레이팅을 입력받은 순서대로 공백으로 구분해 하나씩 출력한다.

예제 입력/출력
예제 입력 예제 출력
5 5000 1600
1621 1928 1809
2300 2300 1499
1805 1211 1699
1600 1700 1800
1792 1617 1830
3
1621 1928 1809 1600 1700 1800 1792 1617 1830

알고리즘 분류
● 구현

소스코드
package Lv1_Bronze;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
 * @author HanHoon
 * @category 구현
 * https://www.acmicpc.net/problem/20299
 */
public class BOJ_B2_20299_3대_측정 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder str = new StringBuilder();
		// 첫줄 N, K, L 입력 (space를 기준으로 토큰을 나눔)
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		// N : 신청한 팀의 수, 토큰을 int형으로 변경해준다., 범위 확인
		int N = Integer.parseInt(st.nextToken());
		if(!(1<=N&&N<=500000)) { System.out.println("1<=N<=500,000 범위를 초과했습니다."); return;}
		// K : 팀원 3명의 코드포스 레이딩의 합에 대한 VIP 클럽 가입조건, 토큰을 int형으로 변경해준다., 범위 확인
		int K = Integer.parseInt(st.nextToken());
		if(!(0<=K&&K<=12000)) { System.out.println("0<=K<=12,000 범위를 초과했습니다."); return;}
		// L : 개인 레이팅에 대한 VIP클럽 최소 가입조건, 토큰을 int형으로 변경해준다., 범위 확인
		int L = Integer.parseInt(st.nextToken());
		if(!(0<=L&&L<=4000)) { System.out.println("0<=L<=4,000 범위를 초과했습니다."); return;}
		
		// 가입가능한 팀 수
		int cnt = 0;
		// 팀 수 N만큼 반복
		for (int i = 0; i < N; i++) {
			int[] arr = new int[3];
			int sum = 0;
			st = new StringTokenizer(br.readLine(), " ");
			// 팀원수 3명의 능력치 입력, 범위 확인
			for (int j = 0; j < 3; j++) {
				arr[j] = Integer.parseInt(st.nextToken());
				if(!(0<=arr[j]&&arr[j]<=4000)) { System.out.println("0<=능력치<=4,000 범위를 초과했습니다."); return;}
				sum += arr[j];
			}
			// 3명의 능력치 합 > 팀 가입조건(K) && 모든 인원 개인 능력치 > 개인 최소 가입조건(L)
			// 조건 부합시 가입가능한 팀 수+1(cnt++), str에 입력 순서대로 값 입력
			if((sum>=K)&&(arr[0]>=L)&&(arr[1]>=L)&&(arr[2]>=L)) {
				cnt++;
				str.append(arr[0]).append(" ");
				str.append(arr[1]).append(" ");
				str.append(arr[2]).append(" ");
			}
		}
		// VIP클럽 가입 가능한 팀 수
		System.out.println(cnt);
		// stringbuilder에 저장된 VIP클럽에 가입된 팀원들의 능력치 출력
		System.out.print(str);
		// BufferedReader 종료
		br.close();
	}
}

 


BaekJoon List
 

BaekJoon List

BOJ Start!! ● [BOJ] 백준 회원가입, 시작하는 법 ● [BOJ] 등급(티어) 및 Solved.AC 적용 ● [BOJ/JAVA] 백준 소스코드 제출 시 유의사항(자바) Bronze ● Bronze V  - ● Bronze IV  - ● Bronze III  -..

han-hoon.tistory.com


  

기회는 준비된 자에게 찾아온다.

 


 

반응형
LIST

댓글