import java.util.Arrays;
import java.util.Collections;
import java.util.List;
class Solution {
public static void main(String[] args) {
int [] cards = {8,6,3,7,2,5,1,4};
solution(cards);
}
public static int solution(int[] cards) {
int answer = 0;
//100장
//1부터 100까지 하나씩 적혀있음
//2~100 자연수
//
Integer [] box = new Integer[cards.length];
for(int i = 0; i < cards.length; i++){
box[i] = cards[i];
}
List<Integer> numberList = Arrays.asList(box);
Collections.shuffle(numberList);
System.out.println(Arrays.toString(box));
int [] addBox = new int[cards.length+1];
for(int i = 0; i < addBox.length-1; i++ ){
addBox[i+1] = box[i];
}
System.out.println(Arrays.toString(addBox));
int [] box1Opener = new int[addBox.length];
int num = (int)(Math.random() * addBox.length)+1;
box1Opener = findCards(addBox, num, box1Opener); //1번 상자를 잘 둔다.
int [] box2Opener = new int[addBox.length];
box2Opener = findCards(addBox, num, box1Opener); //2번 상자를 잘 둔다.
int boxCounter1 = 0;
int boxCounter2 = 0;
for(int i = 0; i < box1Opener.length; i++){
if(box1Opener[i] == 1){
boxCounter1++;
}
if(box2Opener[i] == 1){
boxCounter2++;
}
}
System.out.println(boxCounter1 + " ㅇㅅㅇ " + boxCounter2);
return answer;
}
private static int[] findCards(int[] addBox, int number, int[] boxOpener) {
int temp = addBox[number]; //선택한 상자 안의 숫자 카드를 확인한다.
if(boxOpener[temp] == 1){
//열려 있으면 종료한다.
return boxOpener;
}else{
boxOpener[temp] = 1; //확인한 카드에 적힌 번호에 해당하는 상자를 연다
number = temp; //다시 숫자를 설정해 준다.
return findCards(addBox, number, boxOpener);
}
}
}
문제가 시키는 데로 풀다가 ??????????????????????? 하고
질문하기랑 열심히 읽어봄...
그러니까 무작위 <- 부분은 무시하고 풀어야 함!!!!!!
import java.util.Arrays;
class Solution {
public static void main(String[] args) {
int [] cards = {8,6,3,7,2,5,1,4,9,10,11};
solution(cards);
}
public static int solution(int[] cards) {
//함정 : Random 함수 미사용하고 푸는 문제였음...
int length = cards.length;
int box1 = 0;
int box2 = 0;
int boxCheck = 0;
for (int i = 0; i < length; i++) {
if (cards[i] == 0) {
continue;
}
boxCheck = openBox(cards, i);
System.out.println(boxCheck);
if (box1 < boxCheck) {
//더 큰 값으로 갱신
box2 = box1;
box1 = boxCheck;
}else if (box2 < boxCheck) {
box2 = boxCheck;
}
}
if (box1 == length) {
return 0;
} else {
return box1 * box2;
}
}
private static int openBox(int[] cards, int index) {
if (cards[index] == 0) {
return 0;
}
int nextIndex = cards[index] - 1; //위치가 i+1
cards[index] = 0; //연 곳은 0으로 만듬
//System.out.println(Arrays.toString(cards));
return openBox(cards, nextIndex) + 1;
}
}
visited로 풀다가 더 좋은 코드가 있어서 이걸로 참조함.
이 문제 포인트는 <남은 상자 중 임의의 상자를 다시 고르는 것> 임...
ㅡㅡ 옆에 잘 놔두고 <- 가 열받는 포인트였음...
box1이나 box2나 사실 cards를 참조하면 되는거고 랜덤은 전혀 필요 없는 것이었다...
댓글
댓글 쓰기