문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
없음
풀이
상자가 열렸는 지 저장할 boolean형 배열 visited를 만들고
cards를 탐색하며 각 상자가 열린 적이 없다면 이미 열려있는 상자를 만날 때까지 상자를 열면서 visited를 true로 바꾸고 점수를 센다.
cards의 탐색이 끝나면 점수를 삽입한 리스트를 내림차순으로 정렬하고 0번째, 1번째 점수를 곱한다.
* 리스트에 0을 삽입해두면 1번 그룹만 있는 경우를 쉽게 처리할 수 있다.
코드
import java.util.*;
class Solution {
public int solution(int[] cards) {
ArrayList<Integer> scoreList = new ArrayList<>();
boolean[] visited = new boolean[cards.length];
for(int i=0; i<cards.length; i++) {
if(visited[i]) continue;
int score = 0;
int next = cards[i] - 1;
while(!visited[next]) {
visited[next] = true;
next = cards[next] - 1;
score++;
}
scoreList.add(score);
}
scoreList.add(0);
Collections.sort(scoreList, Collections.reverseOrder());
return scoreList.get(0) * scoreList.get(1);
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 택배상자 (Java) (0) | 2022.11.12 |
---|---|
[프로그래머스] 연속 부분 수열 합의 개수 (Java) (0) | 2022.11.12 |
[프로그래머스] 할인 행사 (Java) (0) | 2022.11.12 |
[프로그래머스] 과일 장수 (Java) (0) | 2022.11.12 |
[프로그래머스] n^2 배열 자르기 (Java) (0) | 2022.11.09 |