PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2018/01/01 23:41:44
Name 이은영
File #1 3.PNG (15.3 KB), Download : 19
Subject [질문] C언어 배열좀 도와주세요!


안녕하세요. 우선 새해 복 많이 받으세요!!!
어쩌다보니 맨날 질문게시판에 C언어 올리게 되는데요
이번에 배열을 공부하다가 막히는 부분이 있어서 질문드리게 됐습니다.
혼자 끙끙 거리면서 4시간 고민한 것 같은데 제 머리론 너무 힘들어서요.

위에 코드는 제가 작성한 코드이구요.
문제는  [표준 입력으로 행렬의 크기 m, n과 문자(char) 행렬이 입력됩니다(m과 n의 범위는 3~10). 입력된 m, n은 공백으로 구분되며 행렬 안에서 *은 지뢰이고 .은 지뢰가 아닙니다. 지뢰가 아닌 요소에는 인접한 지뢰의 개수를 출력하는 프로그램을 만드세요]
입니다.

지금 막히는 부분은 matrix[i][j] 주변에 지뢰가 있다면 카운팅을 해서 더해주고 출력을 하는 부분입니다.

제가 해결하려는 방식은 입력 받은 값에서 '*'은 그냥 냅두고 나머지 값을 '0' 으로 할당하고
주변에 지뢰가 있는지 조사해서 있다면 count를 올린 후 그 값을 matrix[i]i[j]에 할당한 후 그 값을 printf로 출력 하려고 합니다.

도와주세요 ㅠㅠ 아니면 힌트라두 주시면 감사하겠습니다.

통합규정 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'으로 해버리셔도 되요.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
114154 [질문] 신용카드 발급 사기당했습니다 [20] 루엘령7515 18/01/02 7515
114153 [질문] V30쓰시는분들 있으신가요? 전면카메라... [2] 삭제됨2190 18/01/02 2190
114152 [질문] [배그]흠 저만 예전에 비해 불편해진건가요? [4] Mindow2431 18/01/02 2431
114151 [질문] 피파 2018 질문입니다. [3] 교자만두2161 18/01/02 2161
114150 [질문] 아버지 휴대폰 사드리려는데 뭐가 좋을까요? [14] cluefake2072 18/01/02 2072
114149 [질문] 12월 퇴직자 연말정산을 회사에서 하는 경우 [5] 파란무테6337 18/01/02 6337
114148 [질문] 오버워치 광고 여자모델 질문입니다 쓰마이4267 18/01/02 4267
114147 [질문] 안녕하세요 컴알못이 컴퓨터질문이요!! [10] 상처받기싫어2602 18/01/02 2602
114146 [질문] 삼성 갤럭시 AS 에 대해 질문 드립니다. [2] darknight1815 18/01/02 1815
114145 [질문] [LOL]롤 긴장안하고 할 방법 없을까요? [37] 삭제됨8025 18/01/02 8025
114144 [질문] 업비트에서 아이폰 로그인이 안되고 있습니다 [1] 콜라박지호2084 18/01/02 2084
114143 [질문] 원인을 알수없이 휴대폰 진동이 울립니다. [7] 목캔디8690 18/01/02 8690
114142 [질문] 차량 구입 문의 드립니다. [21] bymi2333 18/01/02 2333
114141 [질문] 30대 쇼핑몰 어디 이용하세요? [13] 뽕뽕이2800 18/01/02 2800
114140 [질문] 이런 조건에 맞을만한 결혼식장이 있을까요?? [18] 원스3099 18/01/02 3099
114139 [질문] a형독감 걸리신분들 며칠이나 자가 격리 하셨나요? [10] Red Key6954 18/01/02 6954
114138 [질문] 마누카 꿀의 안전성에 대한 질문입니다. [5] Lord Be Goja4262 18/01/02 4262
114136 [질문] [코인] 코인 시작일로 돌아갔을때 존버했더라면..? [48] Neoguri4975 18/01/02 4975
114135 [질문] 해외여행시 유심? 로밍? 포켓와이파이? 어떤게 좋을까요? [6] possible2644 18/01/02 2644
114134 [질문] 남편에게 가상화폐 투자금 고백 후기 겸 질문드립니다 [38] 불허한다4897 18/01/02 4897
114133 [질문] 피파2017 최신선수이적 패치가 따로있나요? 테란의로망1561 18/01/02 1561
114132 [질문] 조립컴 견적 조언 부탁드립니다. [2] 시행착오 합격생2324 18/01/02 2324
114131 [질문] 캠핑 이나 펜션용 미니프로젝트 지후아빠1506 18/01/02 1506
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로