https://school.programmers.co.kr/learn/courses/30/lessons/131130?language=java
풀이
따로 부연설명이 필요 없을 것 같다.
cards 배열 전체순회하며, 방문한 카드는 방문하지 않고,
count 를 비교해주며
firstMax와 secondMax를 갈아치워주는 로직
여기서 주의할점은 단 한가지이다.
firstMax 값을 업데이트할 때 secondMax값을 firstMax값으로 넣어줘야 한다.
class Solution {
public int solution(int[] cards) {
int firstMax = 0;
int secondMax = 0;
boolean[] visited = new boolean[cards.length];
for(int i = 0; i < cards.length; i++){
int idx = cards[i] - 1;
int count = 0;
while(true) {
if (visited[idx]) break;
visited[idx] = true;
count++;
idx = cards[idx] - 1;
}
if (count > firstMax){
secondMax = firstMax;
firstMax = count;
} else if (count > secondMax) {
secondMax = count;
}
}
return firstMax * secondMax;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 호텔 대실 (0) | 2023.07.04 |
---|---|
[프로그래머스] 카카오 기출 - 양궁대회 (0) | 2023.07.04 |
[프로그래머스] 카카오 기출 - n진수 게임 (0) | 2023.06.20 |
[프로그래머스] 롤케이크 자르기 - java (0) | 2023.06.20 |
[프로그래머스] - 뒤에 있는 큰 수 찾기(LV2) java (2) | 2023.05.14 |