:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
18/01/01 23:49
1. 로직 자체는 어느 정도 맞게 접근하신 것 같은데요. 이중 for 구문 안에서 먼저 matrix[i][j]가 '*'인지 검사하시고, '*'이 아닌 경우 상, 하, 좌, 우 4방향을 조사해서 (대각선도 포함이면 대각선까지 8방향이 되겠죠?) 지뢰이면 count를 올리시면 되겠죠? 뭐 이런식이 되겠죠. if (i-1 >= 0 && matrix[i-1][j] == '*') count++; 나머지는 스스로 채워보세요.
2. count는 매 칸마다 0부터 시작해야 하니까 이중 포문 안에서 초기화하셔야겠죠? 3, matrix는 char의 2차원 배열이잖아요? 그러니까 0, 1, 2 가 아니라 48, 49, 50, ... 이 들어가야 합니다. (아스키코드로 '0', '1', '2', ...) matrix[i][j] = count + '0'; 이렇게 넣으시고 문자열로 출력하셔야 합니다. 혹은 matrix에 굳이 넣지 마시고 count 자체를 출력하셔도 되겠죠. (이 경우 *은 따로 출력하셔야 하구요)
18/01/02 02:07
(수정됨) for(int i = k-1; i <= k+1; ++i) {
-----for(int j = l-1; l <= l+1; ++l) { ----------// search mines using if -----} } for문을 이용한 탐색은 몇번 돌아야하는지 고민하면 됩니다. 우선 2차원 맵을 다 탐색해야하니 2중 for으로 각 위치를 가야하고, 각 위치별로 4방향 혹은 8방향 탐색해야하니 2중 for한번더 돌려야겠죠(if 로 해도 되고요). 1. 그리고 그 전에 배열초기화와 memset을 좀 더 이해할필요가 있어보입니다.(제 기억이 잘못됐을수도 있지만... 이상해보여요. 문자열넣으면 해당행이 바로 입력이 됐던가 흐흐 됐던거 같기도 하고... 그러면 +1을 해준게 개행문자 때문일수도 있겠군요.) 2. int를 char 배열에 저장할 수 없습니다. 명시적으로 형변환을 해주거나 char 변수를 넣어주세요. 묵시적으로 형변환이 되려나.. 안될거에요 아마. 값에 손실이 있을겁니다. 3. 지뢰가 저장된 맵을 저렇게 수정해버리면 제대로 된 답을 구할 수 없습니다. 지뢰주변에 지뢰가 있을경우 해당지뢰는 숫자로 값이 치환될테니까요. 문제에선 이런 케이스를 배제해주었지만 결과값을 저장할 배열을 따로 선언하는게 좋아요. 4. 알고리즘이 목적이면 그냥 정적할당하세요. 동적배열에 익숙해지기위한 문제는 아닌것 같습니다.
18/01/02 10:12
i,j 를 기준으로 3x3 으로 검색해서 카운팅 하면 됩니다.
한가지 주의하실 점은 배열 검색하실 때 -1, m,n 이 나오지않게 주의하시면 됩니다.
18/01/02 13:42
지뢰가 있는 배열을 바로 건들지 마시고..
하나더 동일크기의 배열을 만들어 답을 이곳에 쓰세요. 1. 전 질문에도 비슷한 답드렸는데, Matrix[y][x] 해서 For y For x 순서로 검색하면서 주위3칸 카운트 하면 됩니다. 2. 경계에 있는값들 예외처리 해주시구요.
18/01/02 15:27
조금 더 쉬운 접근 방법을 가자면, 지뢰가 있으면 그 주위에 있는 각 칸에 count를 하나씩 더해도 되지요. 첫번째 이중 for 루프에서 continue 앞 부분에 말이죠. 초기화가 문제인 것 같고, char를 쓰기로 했으면 그냥 memset에서 초기화를 전부 '0'으로 해버리셔도 되요.
|