문법/알고리즘
완전 탐색
코딩 화이팅
2023. 3. 4. 00:45
https://www.acmicpc.net/problem/2303
2303번: 숫자 게임
N명이 모여 숫자 게임을 하고자 한다. 각 사람에게는 1부터 10사이의 수가 적혀진 다섯 장의 카드가 주어진다. 그 중 세 장의 카드를 골라 합을 구한 후 일의 자리 수가 가장 큰 사람이 게임을 이
www.acmicpc.net
package im대비;
import java.util.Arrays;
import java.util.Scanner;
public class bj2303 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int peo=sc.nextInt();//사람 수 입력
int[] card=new int[5];//입력 받을 카드의 배열
int[] sumArr=new int[1001];
for (int i = 0; i < peo; i++) {
for (int j = 0; j < 5; j++) {
card[j]=sc.nextInt();
}//카드의 번호들 입력
int max=Integer.MIN_VALUE;
int sum=0;
for (int j = 0; j < 5; j++) {
for (int j2 = 0; j2 < 5; j2++) {
if (j2!=j) {
for (int k = 0; k < 5; k++) {
if (k!=j&&k!=j2) {
sum=(card[j]+card[j2]+card[k])%10;
if (max<sum) {
max=sum;
sumArr[i]=max;
}
}
}
}
}
}
}//총 입력받을 사람만큼 반복
int maxx=0;
int idx=0;
for (int i = 0; i < peo; i++) {
if (maxx<sumArr[i]) {
maxx=sumArr[i];
idx=i;
}
}
//최대 값 가지고 있는 인덱스 찾음
for (int i = 0; i < peo; i++) {
if (i==idx) {
continue;
}
else if (sumArr[i]==sumArr[idx]) {
idx=i;
}
}
System.out.println(idx+1);
}
}
느낀점 : 완전 탐색을 하는데 좀 더 많은 연습이 필요할 것 같다. 필요한 만큼 for문을 돌려서 마지막에 sum값을 넣어줘 조건문을 걸어 최대값을 찾는다면 배열이 필요없이 바로 최대값을 찾아줄 수 있다. 그리고 처음에 2차배열을 입력 받게 했었는데 도저히 그렇게는 답을 찾을 수가 없어서 알고보니 반복문은 두번 쓰되 1차 배열로 입력받아 처음 사람의 카드, 그다음 두번째 사람의 카드로 입력을 받아 한 명씩 반복 수행하게 반복문을 두번 쓰는 것이었다.