일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java8
- 프로젝트
- baekjoon
- 코틀린
- DFS
- programmers
- 백준
- 자료구조
- back-end
- OS
- java
- 프로그래머스
- 네트워크
- 스프링
- TDD
- backtracking
- LEVEL2
- 그래프
- 자바
- lambda
- algorithm
- 모던자바
- kotlin
- DP
- 운영체제
- Spring
- Brute-force
- 알고리즘
- BFS
- 백트래킹
- Today
- Total
목록알고리즘(Java)/BFS&DFS (7)
요깨비's LAB
import java.util.Scanner; public class Main { static boolean isGet = false; public static void main(String[] args) { Scanner scr = new Scanner(System.in); long A = scr.nextInt(); long B = scr.nextInt(); multiplyTwo(A, B, 1); if (isGet) { return; } appendOne(A, B, 1); if (isGet) { return; } System.out.println(-1); } public static void multiplyTwo(long value, long B, long count) { if (isGet || val..
import java.util.*; public class Main { static int N; static int groupCount = 0; static int[][] map; static boolean[][] isVisited; static int min = Integer.MAX_VALUE; public static void main(String[] args) { Scanner scr = new Scanner(System.in); N = scr.nextInt(); map = new int[N][N]; isVisited = new boolean[N][N]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { map[i][j] = scr.nextI..
import java.io.IOException; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int row; static int col; public static void main(String[] args) throws IOException { Scanner scr = new Scanner(System.in); int cheeseCnt = 0; row = scr.nextInt(); col = scr.nextInt(); int[][] map = new int[row][col]; for (int i = 0; i < row; i++) { for (int j = 0;..
노드 객체를 만들고 적절히 DFS 탐색하면서 부모노드를 갱신해주면 됩니다. 여기에서 이미 갱신된 부모노드는 갱신하지 않도록 예외를 걸어주었습니다. import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Scanner; public class Main { static int N; static Element[] elements; static boolean[] visited; public static void main(String[] args) { Scanner scr = new Scanner(System.in); N = scr.nextInt(); elements = new Element[N + ..
방향그래프인 것을 생각하고, DFS를 이용하여 해결하였습니다. 로직은 아래와 같이 생각했습니다. 행렬에 값을 넣을때 1일 경우 해당 위치 값 x,y를 이용하여 Element객체를 만들어 Queue에 넣는다. Queue에서 Element를 하나 꺼낸다. 해당 위치를 Root로 두고 y는 현재 위치 x는 다음 위치로 DFS 연산을 진행한다. -> DFS 연산은 가리키는 곳이 값이 1이면서 방문하지 않은 곳이면 Root의 next 위치에서 다음 next 값들을 1로 바꿔준다.(이동 가능함을 체크한다는 의미) 그렇지 않으면 종료 -> 만약 Root값과 가리키는 값이 같으면 종료. 그려진 맵을 출력 아래에는 코드입니다. import java.util.LinkedList; import java.util.Queue;..
이번에도.. 오지게 오래 걸렸습니다... 순수 완벽하게 푼것이 아닌.. 백준 질문하기에서 반례들을 이용하면서 풀었구요.. 아직도 분기 처리 조건 생각하는거랑 로직을 제대로 생각 않하고 무작정 문제에 돌입하는 것... 참 안고쳐집니다. 좀만 풀이가 생각날 것 같으면 무조건 키보드에 손이 올라가는 이 흑우.. 처음 아이디어는 자료구조 Set 2개를 이용해서 DFS를 돌면서 각 방문 노드들을 Set에 넣어주면서 indexSet(첫째 줄 배열)이랑 valueSet(두번째 줄 배열)에 값들을 비교하면서 하려고 했는데 빛 좋은 개살구 마냥 아이디어만 좋았지 실제적으로 제 머리가 그걸 구현할 정도로 호환이 안되더군요.. 다음번에 다시 도전해서 올리겠습니다. 그냥 함수 재귀를 이용해서 풀었습니다. 여기에서 통과 조건은..
어후;; 20번 틀리고 21번째에 드디어 해결했네요... 알고보니 로직은 그럭저럭 맞는것 같았으나 BFS에 대한 공부 부족과 객체 지향 활용을 못한 원인이 가장 컸던 것 같습니다.. 차근차근 어떤 문제 상황에 부딪혔고 해결했는지 끄적여 보겠습니다. 저는 고수분들이랑 다르게 간단하고 명료하게 추상화해서 몇줄 안되는 코드로는 못짜서 코드가 길고 좀 보기 싫습니다.. 그냥 저만의 회고시간입니다.. 클래스 정의 우선 Vertax 클래스를 설계했습니다. class Vertax { private int index; private int color; // -1 색없음, 0 빨 1 파 private HashSet connectedEdges; // 해당 정점과 연결된 정점들을 저장 하기 위한 자료구조 public Ver..