역시... 실버 4...
알고리즘 문제라기보단 완벽한 IF ELSE 문제 였던거 같습니다.
구현 내용
역시 문제가 기네요..
구현 방법
문제를 위에부터 그대로 코드로 옮기면.. 풀 수 있습니다... if else에 집중해야겠죠? 하나의 케이스라도 빠지면 틀린 답이 나옵니다.
자세한 설명은 주석을 통해 하겠습니다.
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
import java.util.*;
import java.io.*;
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));
int result = 0;
int temp = 0;
int R = 0;
int B = 0;
int Y = 0;
int G = 0;
int[] num = new int[10];
int min = 10;
int max = 0;
for(int i=0;i<5;i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String word = st.nextToken();
switch (word){
case "R":
R++;
break;
case "B":
B++;
break;
case "Y":
Y++;
break;
case "G":
G++;
break;
}
int number = Integer.parseInt(st.nextToken());
if(min>number){ //가장 작은 수 (연속적인 숫자 찾을때 사용)
min = number;
}
if(max<number){ //가장 큰 수 (결과값 구할 때 사용)
max = number;
}
num[number]++;
}
//알파벳 케이스 시작
if((R==5||B==5||Y==5||G==5)){ //1번 , 4번 케이스
//(카드 5장같은 색)
temp = max+ 600; //숫자가 연속적이지 않을때
if(result<temp){
result = temp;
}
for(int i=min;i<min+5;i++){
if(num[i]!=1){//숫자가 연속적이지 않을때
break;
}
else if(i == min+4){//숫자가 연속적일때
temp = max+900;
if(result<temp){
result = temp;
}
}
}
}else{ //5번 숫자가 연속적일때(카드 5장같은 색 아님)
for(int i=min;i<min+5;i++){
if(num[i]!=1){
break;
}
else if(i == min+4){
temp = max+500;
if(result<temp){
result = temp;
}
}
}
}
//알파벳 케이스 끝
//숫자 케이스 시작
for(int i=1;i<10;i++){
if(num[i]==4){ //2번 (4장이 같은 수)
temp = 800+i;
if(result<temp){
result = temp;
}
}if(num[i]==3){//3번, 6번 (3장이 같은 수)
temp=i+400; // 6번 (나머지 2장이 같은 수가 아닐때)
if(result<temp){
result = temp;
}
for(int j=1;j<10;j++){
if(num[j]==2){ //3번 (나머지 2장이 같은 수)
temp = i*10+j+700;
if(result<temp){
result = temp;
}
break;
}
}
}if(num[i]==2) { //3번, 7번, 8번 (2장이 같은 수)
temp = i + 200; //8번 (나머지 같은 수 없음)
if (result < temp) {
result = temp;
}
for (int j = i+1; j < 10; j++) {//7번 (2장만 같을때)
if (num[j] == 2) {
temp = j * 10 + i + 300;
if (result < temp) {
result = temp;
}
break;
}
}
for(int j=0;j<10;j++){//3번 (나머지 다 같을 때)
if(num[j] == 3){
temp = j*10+i+700;
if(result<temp){
result = temp;
}
break;
}
}
}
}
//숫자 케이스 끝
if(result==0){ //9번 어떠한 경우에도 해당되지 않음
result = max+100;
}
bw.write(String.valueOf(result));
bw.flush();
bw.close();
br.close();
}
}
'Study > CodingTest' 카테고리의 다른 글
[BOJ 1388] 바닥 장식 - JAVA (0) | 2022.09.17 |
---|---|
[BOJ 17413] 단어 뒤집기 2 - JAVA (0) | 2022.09.09 |
[BOJ 1966] 프린터 큐 - JAVA (0) | 2022.09.05 |
[BOJ 3986] 좋은 단어 - JAVA (0) | 2022.08.28 |
[BOJ 11000] 강의실 배정 - JAVA (0) | 2022.08.21 |