728x90
반응형
2024.07.17기준 - 브론즈1
728x90
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 주어진 입력에서 광합성만 가지는 미역의 최솟값과 최댓값을 구하는 문제입니다.
1. 미역의 실험 결과를 저장할 커스텀 클래스를 생성했습니다.
// 미역의 실험 결과를 저장할 클래스
private static class Seaweed {
int p, m;
public Seaweed(int p, int m) {
this.p = p;
this.m = m;
}
}
2. 미역 실험 결과를 저장할 리스트와 리스트에 객체를 추가해줍니다.
// 미역 실험 결과를 저장할 리스트
List<Seaweed> list = new LinkedList<>();
// 미역의 번호가 1부터 시작하기 때문에 n보다 1를 추가한다.
for (int i = 0; i <= n; i++) {
list.add(new Seaweed(-1, -1)); // 아무 값이 없는 경우를 -1로 지정
}
입력 받는 미역의 번호가 1번 부터 시작이기 때문에 n보다 1 많은 객체를 추가해줍니다.
3. 입력받은 실험 결과를 리스트에 저장합니다.
int num, ot;
String pm;
while (m-- > 0) {
st = new StringTokenizer(br.readLine());
num = Integer.parseInt(st.nextToken()); // 미역의 번호
pm = st.nextToken(); // 실험 종목
ot = Integer.parseInt(st.nextToken()); // 실험 결과
switch (pm) {
case "P": // 광합성
list.get(num).p = ot;
break;
case "M": // 운동성
list.get(num).m = ot;
break;
}
}
4. 저장된 실험 결과로 광합성만 가지고 있는지(최솟값) 아니면 광합성을 가지거나 실험을 안하고 운동성을 안가지거나 실험을 안 한 객체를 찾아 수를 세어 줍니다.
int min = 0; // 최솟값
int max = 0; // 최댓값
for (int i = 1; i <= n; i++) {
// 확실히 광합성만 가지고 있는 경우
if (list.get(i).p == 1 && list.get(i).m == 0) {
min++;
}
// 광합성을 가지거나 아직 실험을 안하고 운동성이 없거나 실험을 안했을 때
if ((list.get(i).p == 1 || list.get(i).p == -1) && (list.get(i).m == -1 || list.get(i).m == 0)) {
max++;
}
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
// 미역의 실험 결과를 저장할 클래스
private static class Seaweed {
int p, m;
public Seaweed(int p, int m) {
this.p = p;
this.m = m;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 생물의 수
int m = Integer.parseInt(st.nextToken()); // 실험의 수
// 미역 실험 결과를 저장할 리스트
List<Seaweed> list = new LinkedList<>();
// 미역의 번호가 1부터 시작하기 때문에 n보다 1를 추가한다.
for (int i = 0; i <= n; i++) {
list.add(new Seaweed(-1, -1)); // 아무 값이 없는 경우를 -1로 지정
}
int num, ot;
String pm;
while (m-- > 0) {
st = new StringTokenizer(br.readLine());
num = Integer.parseInt(st.nextToken()); // 미역의 번호
pm = st.nextToken(); // 실험 종목
ot = Integer.parseInt(st.nextToken()); // 실험 결과
switch (pm) {
case "P": // 광합성
list.get(num).p = ot;
break;
case "M": // 운동성
list.get(num).m = ot;
break;
}
}
int min = 0; // 최솟값
int max = 0; // 최댓값
for (int i = 1; i <= n; i++) {
// 확실히 광합성만 가지고 있는 경우
if (list.get(i).p == 1 && list.get(i).m == 0) {
min++;
}
// 광합성을 가지거나 아직 실험을 안하고 운동성이 없거나 실험을 안했을 때
if ((list.get(i).p == 1 || list.get(i).p == -1) && (list.get(i).m == -1 || list.get(i).m == 0)) {
max++;
}
}
sb.append(min).append(" ").append(max);
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 26043번 식당 메뉴 (0) | 2024.07.18 |
---|---|
BAEKJOON / 백준 - JAVA 31066번 비 오는 날 (0) | 2024.07.17 |
BEAKJOON / 백준 - JAVA 1991번 트리 순회 (2) | 2024.07.16 |
BAEKJOON / 백준 - JAVA 12760번 최후의 승자는 누구? (0) | 2024.07.16 |
BAEKJOON / 백준 - JAVA 31776번 예비 소집 결과 보고서 (2) | 2024.07.15 |