Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- playgrounds
- ubuntu java
- ubuntu
- java
- naver
- for developer
- springboot
- VM
- github
- mongod
- instance
- openjdk
- MongoDB
- errorstack
- cloud
- initandlisten
- npm update
- 27inch
- freetier
- MAC
- Spring
- GCP
- Media-type
- 27017
- remote
- Xcode
- navercloud
- 가상머신
- Android
- 몽고디비
Archives
- Today
- Total
김컴공랩
[백준] 2688 - 숫자고르기 JAVA 자바 풀이 본문
헬로월드! 김컴공입니다.
오늘의 문제는 백준 온라인 저지의 2688번 숫자고르기 문제입니다.
그래프를 이용해 빠르게 풀 수 있는 문제인데요, 문제 파악과 풀이 진행해보겠습니다.
1. 문제
DFS 를 이용해 그래프를 순회하면서 사이클이 발생하면 그 사이클릭한 경로의 모든 노드를 출력(갯수도 출력)
2.풀이
전역 변수로 큐를 선언하고 그래프를 순회하면서 사이클이 발생하면 사이클릭한 경로만 큐에 남도록 처리한 후 큐 안의 모든 노드를 정답 ArrayList 에 넣고, 마지막 출력 시 정렬하고 size 와 반복문을 통한 노드 전체 출력.
import java.io.*;
import java.util.*;
import java.math.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static StringBuilder sb = new StringBuilder();
static int N;
static boolean[] check;
static int[] arr;
static ArrayList<Integer> ans;
static Queue<Integer> q;
static void dfs(int n) {
check[n] = true;
q.add(n);
if(q.contains(arr[n]))
{
while(q.peek()!=arr[n])
q.poll();
while(!q.isEmpty())
ans.add(q.poll());
return;
}
if(!check[arr[n]])
dfs(arr[n]);
}
public static void main(String args[]) throws Exception {
N = Integer.parseInt(br.readLine());
check = new boolean[N];
arr = new int[N];
ans = new ArrayList<>();
for(int i=0;i<N;i++)
arr[i] = Integer.parseInt(br.readLine())-1;
q = new LinkedList<>();
for(int i=0;i<N;i++)
{
if(!check[i])
{
q.clear();
dfs(i);
}
}
bw.write(ans.size() + "\n");
Collections.sort(ans);
for(int n : ans)
bw.write(n+1 + "\n");
bw.flush();
}
}
'알고리즘' 카테고리의 다른 글
[알고리즘] Queue 로 1 to N Binary number 구하기 (0) | 2021.04.18 |
---|---|
[알고리즘] 정규표현식 (Regex) 에서 +, * 와 같은 메타데이터 표현하기 (0) | 2021.03.01 |