일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 백준 1600번 말이 되고픈 원숭이
- 백준 8979번 올림픽 S5 자바
- StringTokenizer
- replace()
- 스프링 on-profile
- Java
- map
- HashSet
- kotlin
- StringBuilder
- 서브모듈 yml
- 프로그래머스
- 코틀린기초
- Stack
- 백준 11725번 트리의 부모 찾기
- 포인트 컷
- 백준 2206번 벽 부수고 이동하기 G3
- 프로그래머스 java
- 전위 중위 후위
- hash
- 백준 1967번 트리의 지름 G4 자바
- append
- toUpperCase
- dp
- 백준 2660번 회장뽑기 G5
- 백준 1240번 노드사이의 거리
- 백준 2589번 보물섬 G5
- 스프링 다중프로필
- 프로그래머스 자바
- HashMap
Archives
- Today
- Total
말하는 컴공감자의 텃밭
백준 31423번 신촌 통폐합 계획 G5 - 그래프, 연결 리스트 본문
728x90
이것도 문제 이해하는데 조금 걸렸었다.
단순하게 생각하면 연결리스트 처럼 쭉 이어주면 되는 문제였다.
{ 1,2,3,4,5 }가 존재하면
2랑 3을 연결하고,
{1, 2-3, 4, 5}
1과 2를 연결하면
{1-2-3, 4, 5}
4와 5를 연결하면
{1-2-3, 4-5}
마지막으로 1이랑 4를 연결하면
{1-2-3-4-5} 가 완성된다.
따라서 이어주면 머리랑 꼬리를 구별해주려 했으나 그냥 단순히 한 경로로 생각해서 이어주면 되겠구나 싶었다.
뭉쳐진 부분의 끝을 배열에 저장만 해주면 해당 인덱스로 이동하고 값을 넣어주다가 마지막에 가르키는 곳이 없다면 종료.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import java.io.*; import java.util.*; class Main { // Boj_31423_신촌 통폐합 계획 // 결국 하나로 만들어져야 하므로, 연결되는 순서만 알면 된다. public static List<String> list; public static int N, M, K; public static boolean close; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()); String[] s = new String[N + 1]; int[] nxt = new int[N + 1]; // 다음 연결할곳 int[] tail = new int[N + 1]; // 뭉텅이 끝 지점 표기 for (int i = 1; i <= N; i++) { s[i] = br.readLine(); tail[i] = i; } // 연결리스트 처럼 구현 for (int i = 1; i < N; i++) { String[] parts = br.readLine().split(" "); M = Integer.parseInt(parts[0]); K = Integer.parseInt(parts[1]); // 연결 // 2 3 // 1 2 // 4 5 // 1 4 이므로 // 2와 3을 연결, 1과 2를 연결, 4와 5를 연결, 1과 4를 연결이다. // 1 23 45 가 된다. // 결국 연결만 해주고 출력하면 해결. // 2->3, 1->2, 4->5, 1->4 에서는 tail이 3이므로 3->4 nxt[tail[M]] = K; tail[M] = tail[K]; } StringBuilder sb = new StringBuilder(); while(M != 0){ sb.append(s[M]); M = nxt[M]; } System.out.print(sb.toString()); } } | cs |
728x90
'알고리즘 > Backjoon - Java' 카테고리의 다른 글
백준 2156번 포도주 시식 S1 - DP (0) | 2024.03.18 |
---|---|
백준 1956번 운동 G4 - 플로이드 워셜 자바 (1) | 2024.02.26 |
백준 1106번 호텔 G5 - DP (0) | 2024.02.23 |
백준 G3 히호^<^ (0) | 2024.02.23 |
백준 1027번 고층건물 G4 - 브루트포스 (0) | 2024.02.20 |
Comments