목록BFS (8)
우당탕탕 개발일지
풀이1번 컴퓨터와 연결되어 있는 모든 컴퓨터의 개수를 찾으면 된다. 연결되어 있는 모든 노드를 구하기 때문에 BFS와 DFS 둘 다 상관없다고 판단했다. 입력값 초기화 num: 컴퓨터 개수networkCount: 네트워크 상에 연결된 컴퓨터 쌍의 수 networkInfo: 연결되어 있는 다른 컴퓨터의 번호 저장* networkInfo[n]에 n과 연결된 컴퓨터 번호가 저장되어 있다networkCheck: 각 컴퓨터를 확인했는지 여부 저장 값 networkCount 만큼 데이터를 입력받아 networkInfo에 각 컴퓨터 번호와 연결되어 있는 다른 컴퓨터 번호를 저장한다.편의성을 위해 num+1만큼의 크기를 잡고 0번째 원소는 사용하지 않는다.1번 컴퓨터와 연결된 컴퓨터 수를 구하기 때문에 무조건 ..
풀이처음에 입력값의 의미를 이해하지 못했다....다른 블로그랑 GPT한테 물어보고 이해했다.... ㅎ테스트 케이스 개수가 주어지는 것이 아니라 w,h와 지도정보를 계속 제공하다가 0 0를 만나면 프로그램 종료인 것이었다..! Queue를 활용하여 BFS로 풀었다. 현재 노드와 근접한 노드먼저 확인하는 것이 좋다고 판단했기 때문이었다. 메인0 0을 만나면 프로그램 종료이기 때문에 while문으로 반복하다가 0 0일 경우 빠져나가도록 구현했다. 주어진 땅, 바다 정보 저장 후, 배열을 돌면서 미방문이면서 땅인 노드에서 findLand(x, y) 함수를 호출했다. findLand(x, y) 함수해당 함수에서는 매개변수로 주어진 x,y 노드를 기준으로 8방향의 노드를 확인한다. 위에서 언급했다 싶이 BFS로..
풀이사실 문제를 이해 못해서 다른 블로그를 엄청 많이 봤다...!예시1번에서 내가 생각한 정답은 '1 1 4 4 6 3' 이었는데 왜 '4 6 1 3 1 4'인지 이해가 안되서 한참 보았다. 블로그를 통해 문제를 이해하고 다시 문제를 보니 내가 놓친 부분이 보였다.각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력노드 번호가 2번인 부모 노드부터 n번인 부모 노드 번호까지 출력하라는 의미인게 이제서야 보였다... ㅎ 먼저 제시된 예시1 트리를 표현했다1. 각 노드와 연결된 노드를 저장2. 연결되어 있는 노드를 방문하면서 각 부모 노드를 저장하면된다.각 노드와 연결된 노드각 노드의 부모 노드노드, 1: 4, 6노드, 2: 4, 7노드, 3: 5, 6노드, 4: 1, 2, 7노드, 5: 3노드, 6..
풀이* 각 시도 모두 메인 부분은 동일하고 'findEarthworm()' 함수 부분만 변경함. 1차 시도1이 연결되어 있는 노드 끝까지 탐색 후, 옆 노드로 이동해서 끝까지 탐색함으로 깊이우선탐색알고리즘이라고 판단그래서 스택과 재귀를 활용하여 구현해야 겠다고 생각해서 아래와 같이 구현 현재 노드 기준으로 연결된 노드가 1이고 아직 방문하지 않았다면 해당 함수 재귀로 호출함수 호출되면 스택에 현재 노드 저장 후, while에서 하나 빼서 사용def findEarthworm(startY, startX): checkArr[startY][startX] = True nearNode.append([startY, startX]) # 앞뒤위아래 moveXArr = [1, -1, 0, 0]..
문제안전 지역은 잠겨있지 않은 지역의 덩어리임! 높이 = 4 >> 안전 지역 = 5높이 = 6 >> 안전 지역 = 4 안전역영의 최대 개 : 5 풀이2667번 문제에서 약간 조건이 추가된 문제였다. 덕분에 그때 코드 생각해보면서 문제를 풀어봤다. 1. 입력값 받기 & 최대 높이 구하기입력값을 받으면서 변수 m에 최대 값을 저장했다.비의 양에 대한 조건이 없었고 최대 높이 이상으로 오는건 다 동일한 값이기 때문...! m를 가지고 강수량별 안전 영역 수를 구한다. 2. 강수량별 안전 영역 개수 확인비가 안 오는 경우도 생각하여 높이는 0부터 m까지 반복문 실행함. 2-1. 변수 설정아래 변수들은 강수량별로 다른 정보를 가지고 있기에 해당 반복문에 변수를 선언 및 초기화를 진행했다.count >> 현..
문제과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. 풀이 최종 코드import queuedef findDanji(x, y): # 상, 뒤, 하, 앞 moveX = [0, -1, 0, 1] moveY = [1, 0, -1, 0] q = queue.Queue(..
Java -> Python파이썬 공부를 시작해볼려고 한다. 그래서 이번에는 파이썬으로 풀어보겠다.Java 풀이 풀이Java에서 Python으로 변경하면서 좀 어려웠던 부분을 정리해보도록 하겠다. 2차원 배열 선언miro 변수는 1차원 배열로 선언 후, list 값을 원소로 넣어 2차원 배열을 구현했다. check 변수는 처음에 [[False] * m] * n으로 선언했더니 원하지 않는 결과가 나왔다. check[0][0] = True 를 수행하면 모든 check[i][0] 값이 True로 변경되었다.[...] *n 를 하게되면 동일한 객체를 n개 생성하게 되어 모든 [i][0] 값이 변경된다고 한다. 따라서 다른 객체를 선언하고 싶을 때에는 for _ in range(n)를 통해서 생성해야 한다. ..
문제미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다.위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다. 입출력 예 풀이DFS, BFS 공부했지만 정말 감이 안왔다...그래서 다시! 블로그 보면서 풀이 방법을 읽으면서 코드를 짜봤다. 처음에는 깊이 우선 탐색인줄 알았으나 너비였다...! miro에는 입력값을 저장하고 check에는 방문했으면 true 값을 저장한다. 배열에 주어진 입..