์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋น์ฃผ๊ธฐ์ ํธ
- ํ๋ ์ ๊ตฌ์กฐ
- ํ ํฐ ๋ฒ์ค
- ์ค๋ฅ์ ์ด
- ์ค๋ ๋
- mariadb
- IEEE 802
- ์ค๋ฅ๊ฒ์ถ
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ค๋ธ์
- ์ฐ๋ถํฌdb
- ๋ฐ์ดํฐ ์ ์ก
- til
- ์ฃผ๊ธฐ์ ํธ
- well known ํฌํธ
- ํญํด99
- ์๋น์ค ํ๋ฆฌ๋ฏธํฐ๋ธ
- tcp ํ๋กํ ์ฝ
- xv6
- git merge
- ๊ฐ๋ฐ์์ทจ์
- 99ํด๋ฝ
- reducible
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์์๋ฒํธ
- leetcode
- i-type
- tcp ์ธ๊ทธ๋จผํธ
- ํ๋ก์ด๋์์
- ์ฝ๋ฉํ ์คํธ์ค๋น
- Today
- Total
Unfazedโ๏ธ๐ฏ
[Java] ๊ทธ๋ํ ํ์, ํ๋ก์ด๋–์์ | ๋ฐฑ์ค 11403 ๊ฒฝ๋ก์ฐพ๊ธฐ ๋ณธ๋ฌธ
[Java] ๊ทธ๋ํ ํ์, ํ๋ก์ด๋–์์ | ๋ฐฑ์ค 11403 ๊ฒฝ๋ก์ฐพ๊ธฐ
9taetae9 2024. 10. 28. 18:18https://www.acmicpc.net/problem/11403

์ ๊ทผ ๋ฐฉ์
์ฐ์ ์ ์ i์์ j๋ก ๊ฐ๋ ๊ธธ์ด๊ฐ ์์์ธ ๊ฒฝ๋ก์ ์๋ฏธ๋ฅผ ์ดํดํ๋ ค ํด๋ณด์๋ค.
๊ทธ๋ํ G์์ ์ ์ (i,j)๋ i์์ j๋ก ๊ฐ๋ ๊ฐ์ ์ ์ ๋ฌด๋ฅผ ๋ํ๋ธ๋ค.
๊ทธ๋ํ G์ ์ ์ (i,j)๋ ๋ ธ๋ i์์ ๋ ธ๋ j๋ก ์ง์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ด ์์ด์ผ 1์ด ๋๋ ๋ฐ๋ฉด,
์ ์ i์์ j๋ก ๊ฐ๋ ๊ธธ์ด๊ฐ ์์์ธ ๊ฒฝ๋ก๋ ๋ ธ๋ i์์ 1๊ฐ ์ด์์ ๊ฐ์ ์ ๊ฑฐ์ณ ๋ ธ๋ j๋ก ๋๋ฌํ ์ ์๋์ง์ ์ฃผ๋ชฉํ๋ค.
๋ ธ๋ 1๊ณผ ๋ ธ๋ 2 ์ฌ์ด์ ์ง์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ด ์์ด๋ ๋ ธ๋ 1 => (๋ ธ๋ x1 => ... => ๋ ธ๋ xn) => ๋ ธ๋ 2 ์ ๊ฐ์ด ์ฐ๊ฒฐ๋ ์ ์๋ค๋ฉด
(๋ ธ๋ 1, ๋ ธ๋ 2)์ 1์ธ ๊ฒฝ์ฐ๊ฐ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๋ํ G์์ 1์ธ G[i][j]๋ ์ฐ๋ฆฌ๊ฐ ๊ตฌํ๊ณ ์ํ๋ ์ธ์ ํ๋ ฌ์์๋ 1์ด ๋๋ฏ๋ก, ์ถ๊ฐ์ ์ธ ๋ฐฐ์ด์์ด ๊ทธ๋ํ G๋ฅผ ์ ๋ฐ์ดํธํ๋ฉฐ ์ต์ข ๋ต์ ๊ตฌํ ์ ์์ ๊ฒ์ด๋ผ ํ๋จํ๋ค.
์ฐ์ ๊ทธ๋ํ G๋ฅผ ์ํํ๋ฉฐ 1์ผ๋๋ฅผ ํ์ธํด์ผ ํ๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ์ด์ค for๋ฌธ์ด ํ์ํ ๊ฒ์ด๋ค.
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(i -> j ์ฐ๊ฒฐ๋๋์ง){
G[i][j] = 1;
}
}
}
i์์ j 1๊ฐ ์ด์์ ๊ฐ์ ์ ๊ฑฐ์ณ ์ฐ๊ฒฐ์ด ๋๋์ง๋ฅผ ํ๋จํ ์กฐ๊ฑด์ด ํ์ํ๋ค.
๋ ธ๋ 1 => (๋ ธ๋ x1 => ... => ๋ ธ๋ xn) => ๋ ธ๋ 2 ์ธ ์ํฉ์ด ์ฑ๋ฆฝํ๋ ค๋ฉด
์ฐ์ ๋ ธ๋ 1 => (๋ ธ๋ x1 => ... => ๋ ธ๋ xn), (๋ ธ๋1, ๋ ธ๋ xn)์ด 1์ด ๋์ด์ผํ๊ณ ,
(๋ ธ๋ x1 => ... => ๋ ธ๋ xn) => ๋ ธ๋ 2 , (๋ ธ๋ x1, ๋ ธ๋ 2) ๋ํ 1์ด ๋์ด์ผํ๋ค.
๋ฐ๋ผ์, ์์์ ๋ ธ๋ n์ ๊ฑฐ์ณ i์์ j๋ก ์ฐ๊ฒฐ๋๋์ง ํ์ธํ๊ธฐ์ํด G[i][n] == 1 && G[n][j] == 0 ์์ ํ์ธํ๋ฉด ๋ ๊ฒ์ด๋ค.
๊ฐ ๋ ธ๋๋ฅผ ์ฐจ๋ก๋ก ๊ฑฐ์ฒ๊ฐ๋ ๋ ธ๋๋ก ์ ์ ํ ํ ๊ทธ๋ํG์ ๋ํด ์ด์ค for๋ฌธ์ ๋๋ ค์ฃผ๋ฉด ์ต์ข ์ ์ผ๋ก ์ ์ i์์ j๋ก ๊ฐ๋ ๊ธธ์ด๊ฐ ์์์ธ ๊ฒฝ๋ก๊ฐ 1์ธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
for(int n=0; n < N; n++) { //๊ฑฐ์ฒ๊ฐ๋ ๋
ธ๋ n
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(G[i][n] == 1 && G[n][j] == 1){//i->n && n->j => i->j
G[i][j] = 1;
}
}
}
}
์ด๋ ๊ฑฐ์ฒ๊ฐ๋ ๋ ธ๋ n์ ๊ผญ 0๋ถํฐ N-1์์ผ๋ก ํ์ธํ์ง ์์๋ ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค. (๊ฐ ๊ฒฝ๋ก๋ ๋ค๋ฅธ ๊ฒฝ๋ก์ ๋ฐ๊ฒฌ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ ๋ฆฝ์ ์ด๊ณ , ์ด์ค for๋ฌธ์ด ๋งค๋ฒ ์ ๋ฐ์ดํธ๋ ๋ชจ๋ ๋ ธ๋ ์ (i,j)์ ๋ํด i->n->j๋ฅผ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ด๋ค)
์ต์ข ์ฝ๋
import java.io.*;
import java.util.*;
public class Main {
static int[][] G;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
G = new int[N][N];
//๊ทธ๋ํ ์ธ์ ํ๋ ฌ
for(int i=0; i < N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=0; j < N; j++){
G[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int n=0; n < N; n++) { //๊ฑฐ์ฒ๊ฐ๋ ๋
ธ๋ n
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(G[i][n] == 1 && G[n][j] == 1){//i->n && n->j => i->j
G[i][j] = 1;
}
}
}
}
for(int[] g : G){
for(int r : g){
System.out.print(r+" ");
}
System.out.println();
}
}
}
3์ค for๋ฌธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋ : O(n^3)
์ต์ ํ๋ฅผ ์ํค๊ธฐ ์ํด ์๋์ ๊ฐ์ด i->n์ด 1์ด ์๋๋ฉด j ๋ฃจํ๋ฅผ ๋์ง ์๊ฒ ์์ ํด๋ณด์๋๋ฐ ํฐ ์ฐจ์ด๋ ์์๋ค.
for(int n=0; n < N; n++) { //๊ฑฐ์ฒ๊ฐ๋ ๋
ธ๋ n
for (int i = 0; i < N; i++) {
if(G[i][n] == 1) { //i->n ์ด 1์ด ์๋๋ฉด skip
for (int j = 0; j < N; j++) {
if (G[i][j] == 0 && G[n][j] == 1) {// i->j ์ด ์ด๋ฏธ 1์ด๋ฉด skip, n->j์ด 1์ด๋ฉด i->j ๋ 1
G[i][j] = 1;
}
}
}
}
}
์ถ๋ ฅ ๋ถ๋ถ์ StringBuilder๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ์ ๋ชจ์์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์์ ํด๋ณด๋ ๋ฉ๋ชจ๋ฆฌ์ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถํ ์ ์๋ค๋ ๊ฒ์ ํ์ธํ๋ค. System.out ์ I/O ์์ ์ด๊ธฐ ๋๋ฌธ์ StringBuilder๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋ํ IO ์์ ์ ์ค์ด๊ณ , String ๋ฌธ์์ด ๊ฒฐํฉ์ ์ค์ฌ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ๋ ๊ฐ๋ฅํ๋ค. (๋ฉ๋ชจ๋ฆฌ : 20076KB -> 15996KB, ์๊ฐ : 316ms -> 152ms)
StringBuilder sb = new StringBuilder();
for(int[] g : G){
for(int r : g){
sb.append(r).append(" ");
}
sb.append("\n");
}
System.out.print(sb);
๋๋ ์
์์ผ๋ก StringBuilder ์ฌ์ฉ์ ๋ ์ต์ํด์ง๋๋ก ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค!
'๋ฌธ์ ํด๊ฒฐ (PS) > ์ฝํ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ํ๋ก์ด๋-์์ , DFS | ๋ฐฑ์ค 2458 ํค ์์ (0) | 2024.11.03 |
---|---|
[Java] ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ | ๋ฐฑ์ค 2457 ๊ณต์ฃผ๋์ ์ ์ (0) | 2024.11.02 |
[Java] ๋ฒจ๋ง-ํฌ๋ | ๋ฐฑ์ค 1865 ์ํ (0) | 2024.11.01 |
[Java] ํ๋ก์ด๋โ์์ | ๋ฐฑ์ค 2660 ํ์ฅ๋ฝ๊ธฐ (0) | 2024.10.31 |
[Java] ํ๋ก์ด๋โ์์ | ๋ฐฑ์ค 1389 ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (0) | 2024.10.29 |