백준 풀이/자바(Java)
백준 2621 자바 - 카드게임
콘스_
2024. 6. 11. 13:02
// 카드게임
package Silver_III_3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Ex2621 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] colorList = new String[5]; // 색 저장
int[] numList = new int[5]; // 숫자 저장
int colorCount = 1; // 같은 색 카운트
int[] numCount = new int[10]; // 같은 숫자 카운트
for (int i = 0; i < 5; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
// 색, 숫자 입력
String color = st.nextToken();
int num = Integer.parseInt(st.nextToken());
colorList[i] = color;
numList[i] = num;
// 같은 색, 숫자 카운트 코드
if (i >= 1 && colorList[i - 1].equals(colorList[i])) {
colorCount++;
}
numCount[num]++;
}
Arrays.sort(numList); // 숫자 오름차순 정렬
// 연속적인 숫자 카운트 코드
int continuedNumCount = 1; // 연속적인 숫자 카운트
for (int i = 0; i < 5; i++) {
if (i >= 1 && numList[i] == numList[i - 1] + 1) {
continuedNumCount++;
}
}
// 같은 숫자 계산 코드
int fourSameNum = 0;
int threeSameNum = 0;
int twoSameNum = 0;
int twoOtherSameNum = 0;
for (int i = 1; i <= 9; i++) {
if (numCount[i] == 4) {
fourSameNum = i;
break; // 같은 숫자가 4개면 반복 더 안 해도 됨
} else if (numCount[i] == 3) {
threeSameNum = i;
} else if (numCount[i] == 2) {
if (twoSameNum == 0) {
twoSameNum = i;
} else {
twoOtherSameNum = i;
}
}
}
// 점수를 정하는 규칙대로 실행
int max = numList[4]; // 가장 높은 숫자
int score; // 점수
if (colorCount == 5 && continuedNumCount == 5) { // 1번 규칙
score = max + 900;
} else if (fourSameNum > 0) { // 2번 규칙
score = fourSameNum + 800;
} else if (threeSameNum > 0 && twoSameNum > 0) { // 3번 규칙
score = threeSameNum * 10 + twoSameNum + 700;
} else if (colorCount == 5) { // 4번 규칙
score = max + 600;
} else if (continuedNumCount == 5) { // 5번 규칙
score = max + 500;
} else if (threeSameNum > 0) { // 6번 규칙
score = threeSameNum + 400;
} else if (twoSameNum > 0 && twoOtherSameNum > 0) { // 7번 규칙
score = Math.max(twoSameNum, twoOtherSameNum) * 10 + Math.min(twoSameNum, twoOtherSameNum) + 300;
} else if (twoSameNum > 0) { // 8번 규칙
score = twoSameNum + 200;
} else { // 9번 규칙
score = max + 100;
}
System.out.println(score);
}
}
문제가 크게 어렵진 않았지만, 고려할 부분이 생각보다 많아서 힘들었다.
풀면서 아래 반례가 도움이 많이 됐다
글 읽기 - 제가 문제에 있는 테스트 모음 및 추가 테스트 (acmicpc.net)