본문 바로가기
알고리즘/알고리즘 설명

20230822 [Java] 문제풀이

by JayAlex07 2023. 8. 22.

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