분류 전체보기 198

백준[2178] 미로 탐색

bfs를 살짝 응용한 문제이다. bfs를 사용할 때 무언가 움직여서 확인하려면 행,열에 대해서 배열을 생성한 후 사용하면 쉽게 아이디어를 생각할 수 있다. □ 소스 코드 #include int mazeN,mazeM; int mazeList[100][100]{0}; void bfs2178(int x,int y){ queue mazeQ; int mvX[] = {-1,1,0,0}; int mvY[] = {0,0,-1,1}; mazeQ.push({x,y}); while (!mazeQ.empty()) { x = mazeQ.front().first; y = mazeQ.front().second; mazeQ.pop(); for(int i=0;i=mazeM ) continue; if(mazeList[dX][dY] ==..

백준[2667] 단지번호붙이기

dfs를 이용하면 쉽게 풀지만 저장하는 배열을 동적할당하면 메모리오류가 발생한다..; □ 소스 코드 #include int inputList[25][25]{0}; int aptCntList[25]{0};//단지 별 아파트 개수 int aptCnt; // 단지 개수 int apN; bool dfs2667(int x,int y){ if(x=apN) return false; if(inputList[x][y] == 1){ inputList[x][y] = 0; aptCntList[aptCnt]++; dfs2667(x+1, y); dfs2667(x-1, y); dfs2667(x, y+1); dfs2667(x, y-1); return true; } return false; } void countNumApartment..

백준[2606] 바이러스

해당 문제는 한 컴퓨터를 통해 바이러스에 감염된 컴퓨터 개수를 파악하는 문제이다. DFS를 통해 계산하면 재귀함수를 이용해서 속도적인 측면에서 느려질 것 같아 BFS를 이용하여 해결했다. 단순 BFS 문제이다. □ 소스 코드 #include int comN,comEdge; vector viList[101]; bool viVisted[101]; int virusComCnt = 0; void viFind(int v){ queue qVirus; viVisted[v] = true; qVirus.push(v); while(!qVirus.empty()){ int front = qVirus.front(); qVirus.pop(); for(int i=0;i

백준[24445] 알고리즘 수업 - 너비 우선 탐색 2

앞에서 풀었던 bfs 문제에서 내림차순으로 변경되었다. #include int bfsN2,bfsM2,bfsR2; vector bfsList2[100001]; bool bfsVisited2[100001]; queue bfsQueue2; int* bfsRes2; void bfs24445(int v){ int bCnt2 = 1; bfsVisited2[v] = true; bfsRes2[v] = bCnt2; bfsQueue2.push(v); while(!bfsQueue2.empty()){ int front = bfsQueue2.front(); bfsQueue2.pop(); for(int i=0;ib; } void BFS2(){ scanf("%d%d%d",&bfsN2,&bfsM2,&bfsR2); bfsRes2 = ..

백준[24444] 알고리즘 수업 - 너비 우선 탐색 1

bfs를 이용한 문제이다. 앞에서 풀었던 dfs와 같은 문제지만 bfs로 응용을 살짝 하면 손쉽게 풀 수 있다. 재귀함수로 인한 메모리 오류를 걱정안해도 좋다..ㅎ □ 소스 코드 #include int bfsN,bfsM,bfsR; vector bfsList1[100001]; bool bfsVisited[100001]; queue bfsQueue; int* bfsRes; void bfs24444(int v){ int bfsCnt = 1; bfsVisited[v] = true; bfsRes[v] = bfsCnt; bfsQueue.push(v); while(!bfsQueue.empty()){ int front = bfsQueue.front(); bfsQueue.pop(); for(int i=0;i

백준[24480] 알고리즘 수업 - 깊이 우선 탐색 2

24479번 문제의 오름차순에서 내림차순으로 변경된 것 밖에 없다. #include int *dfsRes; int dfsN2,dfsM2,dfsR2; vector dfsList2[100001]; int cnt2 = 0; bool dfsVisited2[100001]{false}; void dfs24480(int v){ if(dfsVisited2[v]) return; dfsVisited2[v] = true; cnt2++; dfsRes[v] = cnt2; for(int i=0;ib; } void DFS2(){ scanf("%d%d%d",&dfsN2,&dfsM2,&dfsR2); dfsRes = new int[dfsN2+1]; for(int i=0;i

백준[24479] 알고리즘 수업 - 깊이 우선 탐색 1

DFS를 응용한 첫 문제인데.. 실전으로 처음 접하다 보니 너무 어렵다;; 재귀함수가 100,000번 이상 중첩되다 보면 메모리 오류가 나기도 하고 cout, cin을 사용하면 대량 데이터를 입력받다 보니 시간초과가 뜨기도 한다. 여러 가지로 너무 힘든 문제다... #include int dfsN, dfsM, dfsR; bool* dfsResList; vector dfsList[100001]; int dfsRes24479[100001]; int cnt = 0; void dfs24479(int v){ if(dfsResList[v]) return; dfsResList[v] = true; cnt++; dfsRes24479[v] = cnt; for(int i=0;i

미로 탈출

'이것이 코딩테스트다 with 파이썬' 실전 문제 5-4입니다. 미로나 이동하는 문제는 BFS를 많이 사용하는 것 같다. 아직 미숙해서... 문제가 너무 어렵다ㅠ □ 소스 코드 #include int N,M; int** mazeInput; int mazeBFS(int x, int y){ queue mazeQueue; mazeQueue.push({x,y}); int mvX[] = {-1,0,1,0}; //상,좌,하,우 int mvY[] = {0,-1,0,1}; while(!mazeQueue.empty()){ x = mazeQueue.front().first; y = mazeQueue.front().second; mazeQueue.pop(); for(int i=0;i= N ) continue; if(maze..