[예시질문] 마지막 예시 코드 질문 있습니다.
257
작성한 질문수 16
#include <bits/stdc++.h>
using namespace std;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
// bool m[3][3];
bool visited[3][3];
bool m[3][3] = {
1, 0, 1,
1, 0, 1,
0, 1, 1
};
// void visit(int x, int y)
// {
// cout << '(' << x << ", " << y << ')' << '\n';
// visited[x][y] = true;
// for(int i = 0; i < 4; i++)
// {
// int nx = x + dx[i];
// int ny = y + dy[i];
// if(nx < 0 || nx >= 3 || ny < 0 || ny >= 3)
// continue;
// else
// if(!visited[nx][ny] && m[nx][ny])
// visit(nx, ny);
// }
// }
int main(void)
{
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
for(int k = 0; k < 4; k++)
{
int nx = i + dx[k];
int ny = j + dy[k];
if(nx < 0 || nx >= 3 || ny <0 || ny >= 3)
continue;
else
if(!visited[nx][ny] && m[nx][ny])
{
cout << '(' << nx << ", " << ny << ')' << '\n';
visited[nx][ny] = true;
}
}
// for(int i = 0; i < 3; i++)
// for(int j = 0; j < 3; j++)
// cin >> m[i][j];
// visit(0, 0);
return 0;
}강의를 보고 제가 작성한 코드입니다.
강의 내
Q. 3 * 3 맵을 입력받아야 함. 이 맵은 1과 0으로 이루어져있고 {0, 0}은 무조건 1임을 보장한다. {0, 0}부터 4방향을 기준으로 한칸씩 탐색해나가며 방문한 정점은 다시 방문하지 않으며 방문하는 좌표를 출력하는 코드. 0은 갈 수 없는 지역. 1은 갈 수 있는 지역을 구현하시오.라는 문제에 따라서 해당 코드로 구현했습니다.
해당 코드의 결과는
(1, 0)
(0, 2)
(0, 0)
(1, 2)
(2, 1)
(2, 2)
정확한 의도와는 다르게 구현된 부분( (0, 0) 부터 가는게 아니라서 출력 순서가 바뀜) 이 있지만 문제에 맞게 작성을 했는데요.
강사님이 작성하신 코드를 그대로 복붙한 결과, 강사님이 작성하신 코드 참조해서 작성한 코드 결과가 모두
(0, 0)
(1, 0)이렇게 결과가 나왔는데
잘못된게 아닌가 싶어서 질문 드립니다.
혹시 제가 뭔가 빼먹었나요.
현재까지 본 영상으로 DFS, BFS 에서 사용되는 핵심 부분의 일부를 빌드업으로써 설명을 잘해주셔서 이해가 빨리 됩니다. 근데 아무래도 왜 저런 결과가 나오는지 이해가 잘 안됩니다. 재귀 호출로 인해서 분명 다 조회가 될텐데 말이죠.
강의 잘 듣고 있습니다.
답변 1
1
안녕하세요 123님 ㅎㅎ
지금 보시면 이 코드요.
int main(void)
{
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
for(int k = 0; k < 4; k++)
{
int nx = i + dx[k];
int ny = j + dy[k];
if(nx < 0 || nx >= 3 || ny <0 || ny >= 3)
continue;
else
if(!visited[nx][ny] && m[nx][ny])
{
cout << '(' << nx << ", " << ny << ')' << '\n';
visited[nx][ny] = true;
}
}
이게 탐색하는 코드라는 말씀이시죠?
이거는 탐색이라고 볼 수 없는 코드입니다.
탐색은 어떠한 지점으로 부터 시작해서 >> DFS든 BFS든 그 지점으로 부터 이어가며 탐색하는 로직이 필요합니다.
이코드는
단지 맵 전체를 순회하며 방문되어있지 않고 맵의 요소가 1인 지점을 방문해서 해당 좌표를 출력하는 코드입니다.
그래서 저와는 다른 결과가 나는 것 같습니다.
또한, x, y보다는 y, x로 코드를 구축하는게 좋습니다.
해당 이유는 교안내의
2차원배열과 탐색을 빠르게 하는 팁
을 참고 부탁드립니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
답변 감사합니다.
제가 글을 좀 잘못 작성해서 오해가 불러왔네요.
제가 묻고 싶었던 부분은 결과 부분입니다.
(0, 0)
(0, 2)
(1, 0)
(1, 2)
(2, 1)
(2, 2)이렇게 나와야 하는 부분이 강사님이 작성하신 코드에서 나와야하는 코드가 아닌가 했습니다.
작성하는 지금 코드를 다시 보니
DFS 함수를 전체 행렬만큼 반복하지 않는다면 결국
1번의 시행결과가 단순히 하나의 컴포넌트를 출력할뿐이라는 것을 알았네요.
답변 감사합니다.
5-B
0
15
2
4 - A
0
33
2
코딩살구클럽 입장이 안됩니다
0
82
2
4-F 경우의 수 질문입니다.
0
35
2
코딩살구클럽 가입이 안됩니다.
0
85
2
살구 클럽에 대한 질문있습ㄴ디ㅏ
0
63
1
교안 158페이지 문의드립니다
0
46
2
코딩살구클럽 관련 건의사항
0
119
1
코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다
0
45
1
진행 방법 질문드립니다!
0
83
2
2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.
0
64
2
2주차 개념#12 트리 순회
0
33
2
백준사이트가 종료된다고 합니다.
0
318
2
백준 서비스 종료
9
953
1
sk 하이닉스 코테 대비
0
388
2
3-G 최댓값 질문
0
54
1
모듈러 연산 값이 10이 아닌 경우도 있지 않나요?
0
84
2
3-I 코드 질문드립니다.
0
66
2
3-N 질문 있습니다.
0
68
2
학습방법
0
105
2
4-H 질문 있습니다 (코드 리뷰)
0
69
2
코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.
0
186
2
2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.
0
74
2
2주차 개념 #4-2. 인접행렬 질문있습니다.
0
66
2





