일단 나의 풀이는 아래와 같다.
import java.util.*;
import java.io.*;
class Main{
public static char[] solution(int T, int[][] sj, int[][] sb) {
char[] answer = new char[T];
for(int i=0;i<T;i++) {
while(true) {
int sj_min=Arrays.stream(sj[i]).min().getAsInt();
int sb_min=Arrays.stream(sb[i]).min().getAsInt();
if(sj_min>=sb_min) {
sb[i]=Arrays.stream(sb[i])
.filter(x->x!=sb_min)
.toArray();
}else {
sj[i]=Arrays.stream(sj[i])
.filter(x->x!=sj_min)
.toArray();
}
if(sb.length==0||sj.length==0) {
if(sb.length==0)
answer[i]='S';
else
answer[i]='B';
break;
}
}
}
return answer;
}
public static void main(String[] args) throws IOException{
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
int[][] sj = new int[T][];
int[][] sb = new int[T][];
br.readLine();
for(int i=0;i<T;i++){
br.readLine();
String team_sj = br.readLine();
String team_sb = br.readLine();
sj[i]= Arrays.stream(team_sj.split(" "))
.mapToInt(Integer::parseInt)
.toArray();
sb[i]= Arrays.stream(team_sb.split(" "))
.mapToInt(Integer::parseInt)
.toArray();
br.readLine();
}
for(char x: solution(T,sj,sb))
System.out.println(x);
}
}
위와 같은 error가 발생한다.
Arrays.stream(sb[i]).min().getAsInt();
min()이라는 함수가 만약에 sb[i]에 값이 하나 들어있으면 비교할 수 없기 때문에 값이 존재하지 않는다고 뜨는 거 같다.
이 문제를 해결하면 너무 코드가 길어지고 이미 2시간 정도의 시간을 썼기 때문에 다른 사람의 풀이를 참고하기로 했다.
일단 나의 접근법이 잘못되었다는 것을 알았다.
문제 자체로 과정을 모두 거치는 것보다는 그냥 알맞은 출력값이 나오게 하면 되는 것이기 때문에
가장 강한 병사를 가지고 있는 팀이 승리하는 것이다.
근데 두 팀의 강한 병사의 힘을 비교했을 때 같다면 세준이 승리하는 것이다.
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
char[] answer = new char[T];
for(int i=0;i<T;i++) {
//문제의 공백 처리 blank
String blank = br.readLine();
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int sj = Integer.parseInt(st.nextToken());
int sb = Integer.parseInt(st.nextToken());
int max_sb =-1;
int max_sj =-1;
st = new StringTokenizer(br.readLine()," ");
for(int j=0;j<sj;j++) {
int power = Integer.parseInt(st.nextToken());
if(max_sj<power) max_sj = power;
}
st = new StringTokenizer(br.readLine()," ");
for(int j=0;j<sb;j++) {
int power = Integer.parseInt(st.nextToken());
if(max_sb<power) max_sb = power;
}
if(max_sj>=max_sb) answer[i]='S';
else answer[i]='B';
}
for(int i=0;i<T;i++) {
System.out.println(answer[i]);
}
}
}
따라서 위와 같이 코드를 구성하여 정답에 도착하였다.
여기서 내가 하나 더 배웠던 것은
BufferedReader의 공백 또한 값으로 읽기 때문에
공백이 등장하는 경우 그 공백을 버리도록 쓸데없는 String형 변수를 선언해줘야 한다.
위 문제의 경우에 String blank라는 변수가 해당된다.