728x90
반응형
https://www.acmicpc.net/problem/2621
문제가 정말..너무 길다.
문제 자체는 어려운 게 없었는데, 규칙이 너무 많아서 내가 코드를 짠게 아니라 노동을 한 것 같다.
나는 문제에서 정해준 규칙 1번~9번을 그대로 if-else문으로 만들었는데
다른 방법으로 코드를 짰으면 더 간결했을까?
.
.
우선 카드 정보를 입력받는데,
카드의 숫자는 num[10] 배열에, 카드의 색깔은 RGBY[4] 배열에
숫자와 색깔의 개수만 세서 넣었다.
그리고 조건에 부합하는지 확인하기 위해
여러 함수를 만들었는데
sameNumber(int i) => 똑같은 번호인 카드를 i개 가지고 있는지 확인해서 맞으면 true, 아니면 false 리턴
db_sameNumber() ==> 똑같은 번호인 카드를 2개 가지고 있는것이 2쌍 있으면 true, 아니면 false 리턴(ex 1,1,5,5,6이면 true)
sameColor() ==> 같은색깔 카드가 5개면 true, 아니면 false 리턴
consecutive() ==> 가진 카드 중에서 연속적인 숫자의 길이 리턴
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class P2621 {
static int[] num = new int[10];
static int[] RGBY = new int[4];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(br.readLine());
String color = st.nextToken();
if (color.equals("R")) {
RGBY[0]++;
} else if (color.equals("G")) {
RGBY[1]++;
} else if (color.equals("B")) {
RGBY[2]++;
} else if (color.equals("Y")) {
RGBY[3]++;
}
int n = Integer.parseInt(st.nextToken());
num[n]++;
}
if (sameColor() && consecutive() == 5) {
int rs = 0;
for (int i = 1; i < 10; i++) {
if (num[i] > 0) {
rs = i;
}
}
System.out.println(rs + 900);
} else if (sameNumber(4)) {
int rs = 0;
for (int i = 1; i < 10; i++) {
if (num[i] == 4) {
rs = i;
}
}
System.out.println(rs + 800);
} else if (sameNumber(3) && sameNumber(2)) {
int rs = 0;
for (int i = 1; i < 10; i++) {
if (num[i] == 3) {
rs += (i * 10);
} else if (num[i] == 2) {
rs += i;
}
}
System.out.println(rs + 700);
} else if (sameColor()) {
int rs = 0;
for (int i = 1; i < 10; i++) {
if (num[i] > 0) {
rs = i;
}
}
System.out.println(rs + 600);
} else if (consecutive() == 5) {
int rs = 0;
for (int i = 1; i < 10; i++) {
if (num[i] > 0) {
rs = i;
}
}
System.out.println(rs + 500);
} else if (sameNumber(3)) {
int rs = 0;
for (int i = 1; i < 10; i++) {
if (num[i] == 3) {
rs += (i);
}
}
System.out.println(rs + 400);
} else if (db_sameNumber()) {
int rs = 0;
for (int i = 1; i < 10; i++) {
if (num[i] == 2) {
rs += (i);
break;
}
}
for (int i = 9; i >= 1; i--) {
if (num[i] == 2) {
rs += (i * 10);
break;
}
}
System.out.println(rs + 300);
} else if (sameNumber(2)) {
int rs = 0;
for (int i = 1; i < 10; i++) {
if (num[i] == 2) {
rs += (i);
}
}
System.out.println(rs + 200);
} else {
int rs = 0;
for (int i = 1; i < 10; i++) {
if (num[i] > 0) {
rs = i;
}
}
System.out.println(rs + 100);
}
}
static boolean sameColor() {
for (int i = 0; i < 4; i++) {
if (RGBY[i] == 5) {
return true;
}
}
return false;
}
static boolean sameNumber(int n) {
for (int i = 0; i < 10; i++) {
if (num[i] == n) {
return true;
}
}
return false;
}
static boolean db_sameNumber() {
int count = 0;
for (int i = 0; i < 10; i++) {
if (num[i] == 2)
count++;
}
if (count == 2)
return true;
else
return false;
}
static int consecutive() {
int consecutive_num = 0;
for (int i = 0; i < 10; i++) {
if (num[i] > 0) {
int count = 1;
int next = i + 1;
while (next < 10 && num[next] > 0) {
next++;
count++;
}
consecutive_num = Math.max(consecutive_num, count);
}
}
return consecutive_num;
}
}
728x90
반응형
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 2661번: 좋은수열 (0) | 2023.01.19 |
---|---|
[자바] 백준 11657번: 타임머신 (0) | 2023.01.18 |
[자바] 백준 1747번: 소수&팰린드롬 (0) | 2023.01.17 |
[자바] 백준 1652: 누울 자리를 찾아라 (0) | 2023.01.16 |
[자바] 백준 1764번: 듣보잡 (0) | 2023.01.16 |
댓글