20230822 [Java] 문제풀이
[프로그래머스] 혼자 놀기의 달인
상자에 카드를 넣고 무작위로 섞어 일렬로 나열한다
그리고 상자를 1번부터 순차적으로 증가하는 번호를 붙인다
- 상자 번호에서, 카드 번호를 보고, 카드 번호에 대한 상자 번호를 여는 것이다
인덱스를 상자 번호라고 생각하면 카드 번호에 1을 항상 빼야한다
import java.util.*;
class Solution {
public int solution(int[] cards) {
ArrayList<Integer> group = new ArrayList<>();
int[] visited = new int[cards.length];
for (int i = 0; i < cards.length; i ++) {
int tempCount = 0;
if (visited[i] == 0) {
Stack<Integer> stack = new Stack<>();
stack.add(i);
visited[i] = 1;
while (!stack.isEmpty()) {
tempCount ++;
int current = stack.pop();
if (visited[cards[current] - 1] == 0) {
stack.add(cards[current] - 1);
visited[cards[current] - 1] = 1;
}
}
}
group.add(tempCount);
}
Collections.sort(group, (x1, x2) -> x2 - x1);
return group.get(0) * group.get(1);
}
}
'알고리즘 > 알고리즘 설명' 카테고리의 다른 글
20230829 [Java] 문제풀이 (0) | 2023.08.29 |
---|---|
20230828 [Java] 문제풀이 (1) | 2023.08.28 |
20230821 [Java] 문제풀이 (0) | 2023.08.21 |
20230819 [Java] 문제풀이 (0) | 2023.08.19 |
20230817 [Java] 문제풀이 (0) | 2023.08.17 |