- 문제
- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131130
- 게임에서 얻을 수 있는 최고 점수
- 조건
- 2 ≤ 카드의 길이 ≤ 100
- 카드의 번호는 자연수
- 입력
- 카드의 길이
- 출력
- 게임에서 얻을 수 있는 최고 점수
- 로직 1)
- for문 반복
import java.util.*;
class Solution {
public int solution(int[] cards) {
int answer = 0;
for(int i=0; i<cards.length; i++) {
int result = find(cards.clone(), i);
// 1번 상자 그룹 이외 남는 상자가 없는 경우
if(result == 0) return answer;
if(answer < result) answer = result;
}
return answer;
}
public int find(int[] cards, int index) {
int box1 = 1;
int box2 = 0;
int cur = cards[index];
cards[index] = -1;
while(true) {
int tmp = cards[cur-1];
if(tmp != -1) {
box1++;
cards[cur-1] = -1;
cur = tmp;
} else break;
}
if(box1 == cards.length) return 0;
for(int i=0; i<cards.length; i++) {
if(cards[i] != -1) {
int[] tmp_cards = cards.clone();
cur = tmp_cards[i];
int tmp_box2 = 0;
while(true) {
int tmp = tmp_cards[cur-1];
if(tmp != -1) {
tmp_box2++;
tmp_cards[cur-1] = -1;
cur = tmp;
} else break;
}
if(tmp_box2 > box2) box2 = tmp_box2;
}
}
return box1 * box2;
}
}
- 결과
- 성공
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 level1 - 달리기 경주 (0) | 2023.07.27 |
---|---|
[Java] 프로그래머스 level 2 - 광물캐기 (0) | 2023.03.29 |