풀이 이 문제는 백트래킹을 이용하여 해결할 수 있는 문제다. 파이프를 생성하고 그 경로는 다시는 사용되서는 안되므로 DFS를 사용하여야 한다. 생성되어야 할 파이프의 개수는 최대로 출력되어야한다. 이 말은 파이프는 빵집의 제일 위부터 연결되면(우상, 우, 우하 중에서 우상을 우선) 최대로 파이프를 만들 수 있다. DFS탐색을 행의 개수만큼진행하면서 만약 파이프가 생성되면 그대로 전부 return을 해주면서 그 파이프를 다시는 사용할 수 없게 만든다.( 방문배열 v에서 방문했다고 true로 체크는 했지만 돌아오면서 false로 바꾸지 않는다) 코드
풀이 벽이 없는 '0'은 이동 가능하고 벽인 '1'은 이동이 불가능하다. 하지만 딱 한 번만 벽인 '1'을 부수고 목적지로 갈 수 있다. 이 문제를 dfs를 통해 풀면 시간초과가 날 수 있다. 그래서 BFS를 이용하여 문제를 해결하였다. 우선 현재위치에서의 이동 값이랑, 벽을 부쉈는지의 유무를 확인하기 위해 Point클래스를 만들었다. 그리고 가장 중요한 것은 3차원 방문 배열(boolean)을 만들어야한다. 벽을 부수고 이동한 방문 배열과 부수지 않고 이동한 방문 배열을 따로 두고 이동해야 한다. 그렇지 않으면 같은 좌표를 참조하게 되었을 때 방문하지 않은 좌표임에도 불구하고 이미 방문했다고 판단할 수 도 있기 때문이다. 4방 탐색을 통하여 한칸 씩 이동할 때마다 cnt를 +1 한상태로 Point형 객..

구현방법 쓰레드를 구현하는 방법은 Thread클래스를 상속받는 것과, Runnable 인터페이스를 구현하는 방법, 모두 2가지가 있다. 이 두가지 방법 중 어느 쪽을 사용해도 별 차이는 없지만 Thread 클래스를 상속받으면 다른 클래스를 상속받을 수 없기 때문에, Runnable 인터페이스를 구현하는 것이 일반적. 구현코드 run() vs start() 스레드 실행과 관련된 두 가지 중요한 메서드는 run()과 start()메서드이다. run() 메서드는 스레드에서 수행할 작업을 정의하는 메서드이고 start()메서드 호출은 스레드의 run() 메서드가 호출될 수 있도록 준비하는 과정이다. 실제 run() 메서드를 호출하는 것은 JVM이다. start()가 호출되면 JVM이 운영체제의 스레드 스케줄러에..