728x90
반응형
2024.07.05기준 - 실버3
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 주어진 과목, 과일, 색상에서 질의에 해당하는 걸 선호하는 학생의 수를 구하는 문제입니다.
1. 과목, 과일, 색상 중에서 들어온 문자열에 따라 인덱스를 나눠 주는 함수를 생성했습니다.
private static int index(String s) {
if (s.equals("kor") || s.equals("apple") || s.equals("red")) {
return 0;
} else if (s.equals("eng") || s.equals("pear") || s.equals("blue")) {
return 1;
} else if (s.equals("math") || s.equals("orange") || s.equals("green")) {
return 2;
} else {
return 3;
}
}
2. 과목, 과일, 색상의 모든 경우의 수에 해당하는 배열을 생성해 count를 세어 주었습니다.
int[][][] count = new int[4][4][4];
String su, fr, co;
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
su = st.nextToken(); // 과목
fr = st.nextToken(); // 과일
co = st.nextToken(); // 색상
// 모든 경우의 수를 count합니다.
count[index(su)][index(fr)][index(co)]++;
count[index(su)][index(fr)][3]++;
count[index(su)][3][index(co)]++;
count[index(su)][3][3]++;
count[3][index(fr)][index(co)]++;
count[3][index(fr)][3]++;
count[3][3][index(co)]++;
count[3][3][3]++;
}
3. 질의를 받았을 때 해당하는 위치의 count 값을 반환하여 출력해줍니다.
while (m-- > 0) {
st = new StringTokenizer(br.readLine());
su = st.nextToken(); // 과목
fr = st.nextToken(); // 과일
co = st.nextToken(); // 색상
sb.append(count[index(su)][index(fr)][index(co)]).append("\n");
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
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()); // 질의
int[][][] count = new int[4][4][4];
String su, fr, co;
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
su = st.nextToken(); // 과목
fr = st.nextToken(); // 과일
co = st.nextToken(); // 색상
// 모든 경우의 수를 count합니다.
count[index(su)][index(fr)][index(co)]++;
count[index(su)][index(fr)][3]++;
count[index(su)][3][index(co)]++;
count[index(su)][3][3]++;
count[3][index(fr)][index(co)]++;
count[3][index(fr)][3]++;
count[3][3][index(co)]++;
count[3][3][3]++;
}
while (m-- > 0) {
st = new StringTokenizer(br.readLine());
su = st.nextToken(); // 과목
fr = st.nextToken(); // 과일
co = st.nextToken(); // 색상
sb.append(count[index(su)][index(fr)][index(co)]).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
// 인덱스를 찾아주는 함수.
private static int index(String s) {
if (s.equals("kor") || s.equals("apple") || s.equals("red")) {
return 0;
} else if (s.equals("eng") || s.equals("pear") || s.equals("blue")) {
return 1;
} else if (s.equals("math") || s.equals("orange") || s.equals("green")) {
return 2;
} else {
return 3;
}
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 31880번 K512컵 개최! (0) | 2024.07.06 |
---|---|
BEAKJOON / 백준 - JAVA 27112번 시간 외 근무 멈춰! (0) | 2024.07.06 |
BAEKJOON / 백준 - JAVA 1652번 누울 자리를 찾아라 (0) | 2024.07.05 |
BAEKJOON / 백준 - JAVA 1021번 회전하는 큐 (0) | 2024.07.04 |
BEAKJOON / 백준 - JAVA 14566번 Dongjak N1 (0) | 2024.07.04 |