문제는 다음과 같다.
누가봐도 dfs,bfs를 사용하는 문제였다. 너무 대놓고 쓰세요~ 이래가지고 쉽게 풀 수 있을줄 알았다. 아이디어도 바로 떠오르기도했고..
결론적으로 크게 어렵지는 않은데 배운건 꽤 있어서 기분이 좋았다.
소스코드는 다음과 같다.
입력대로 컴퓨터간의 간선을 com이라는 vector에 넣어주고, dfs를 돌려서 연결된 컴퓨터가 있을때마다 cnt값을 1씩 증가 시켰다. 결국 답은 cnt를 출력하면 된다.
-배운 것
1. 2차원 벡터사용에는 크게 두가지가 있다.
-vector<int> com[101];
이 경우는 위의 코드와 같이 push_back()함수를 써서 값을 대입해야한다. 내가 원하는 만큼 자리가 할당되어있는게 아 니기 때문에 바로 com[x][i]와 같이 인덱스를 통해 접근할 수 없었다. (이걸 깨닫느라 시간이 좀 오래 걸렸음;;)
이 경우는 컴퓨터 1과 2를 잇는 간선을 표현할때, com[1].push_back(2); 이런식으로 하기때문에 간선이 있다고해서 벡 터에 1이 들어있는게 아니다.
-vector<vector<int>> com(101,vector<int>(101,0));
이 경우는 이미 101개의 공간이 할당 되어 0으로 초기화까지 진행된 상태이다. 따라서 com[x][i] =0; 이런식으로 인덱스 로 접근이 가능하다. 또한 이런식으로 선언하면, 컴퓨터 1과 2를 잇는 간선이 있다면 com[1][2] = 1; com[2][1] = 1; 이런식으로 1을 대입한다. (간선이 있다는 뜻) 따라서 dfs함수 내부에서 코드를 다른식으로 짜야한다.
2. 전역변수를 선언하면 0으로 초기화 된다.
전역변수로 int check[101]; 을 선언하면 자동으로 0으로 초기화 된다. 이것도 몰랐음; 공부 열심히 안한듯;;
'BOJ 문제풀이' 카테고리의 다른 글
#2178 미로탐색 (0) | 2022.03.29 |
---|---|
#1012 유기농 배추 (0) | 2022.03.27 |
#2667 단지번호 붙이기 (0) | 2022.03.27 |
#1707 이분 그래프 (0) | 2022.03.27 |
#11724 연결요소의 개수 (0) | 2022.03.27 |