package org.example.알고리즘.혼자놀기의달인;
class Solution {
public static void main(String[] args) {
int[] cards = {8, 6, 3, 7, 2, 5, 1, 4};
Solution solution = new Solution();
System.out.println(solution.solution(cards));
}
public int solution(int[] cards) {
int maxScore = 0;
for (int start = 1; start <= cards.length; start++) {
boolean[] visited = new boolean[cards.length + 1];
int groupSize1 = getGroupSize(start, cards, visited);
for (int i = 1; i <= cards.length; i++) {
if (!visited[i]) {
int groupSize2 = getGroupSize(i, cards, visited);
maxScore = Math.max(maxScore, groupSize1 * groupSize2);
}
}
}
return maxScore;
}
private int getGroupSize(int start, int[] cards, boolean[] visited) {
int groupSize = 0;
int current = start;
while (!visited[current]) {
visited[current] = true;
groupSize++;
current = cards[current - 1];
}
return groupSize;
}
}
- 단순하다
- card 배열 순회 1부터 ~ 끝까지
- visited 안에 해당 번호 인덱스 방문처리
- 그룹 사이즈 ++
- 1번이면 card[index-1] 번을 다음 탐색 인덱스로 설정
- 즉, 일련의 그룹화 수행한다.
- 남은 숫자의 그룹중에 가장 큰 사이즈를 찾기위해
- 다시 첫번째 원소부터 순회하며 그룹 사이즈를 구함.
- 남은 숫자의 그룹중에 가장 큰 사이즈를 찾기위해
- 즉, 일련의 그룹화 수행한다.
- card 배열 순회 1부터 ~ 끝까지
Uploaded by N2T
'자바 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 안전지대 (0) | 2024.01.07 |
---|---|
[프로그래머스] 바탕화면 정리 (0) | 2024.01.05 |
[프로그래머스] 합승 택시 요금 [플로이드-워셜] (0) | 2023.12.31 |
[프로그래머스] 전력망을 둘로 나누기 (0) | 2023.12.30 |
[프로그래머스] 귤고르기 (0) | 2023.12.24 |