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'으로 해버리셔도 되요.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
114113 [질문] 치킨 콜라말고 뭐랑 드세요? [27] 엄격근엄진지3937 18/01/02 3937
114112 [질문] 스노우보드 강습 질문드립니다. [3] Lancer1507 18/01/01 1507
114111 [질문] C언어 배열좀 도와주세요! [5] 이은영4112 18/01/01 4112
114110 [질문] 어렵고 처음 하는 업무도 정확하고 빠르게 처리하는 분들의 비결은 무엇일까요...? [16] nexon4302 18/01/01 4302
114109 [질문] 최근 해외드라마들중 볼만한거 있나요? [6] 레너블2374 18/01/01 2374
114108 [질문] 1~2년 정도 공부할만한거 추천좀 해주세요. [18] 만년실버5425 18/01/01 5425
114107 [질문] 상견례 선물관련 질문드립니다 [4] 재돌이2602 18/01/01 2602
114106 [질문] 유머글 하나 찾을 수 있을까요? [2] 어찌하리까1656 18/01/01 1656
114105 [질문] 컴퓨터 TV 연결이 안나오는데 도와주세요ㅜㅜ [8] jwkaris2073 18/01/01 2073
114104 [질문] 편두통이 지금 심해서 그런데요... [6] 라플비1818 18/01/01 1818
114103 [질문] 스팀 해킹 당한 것 같은데 어찌 복구 해야하나요 [3] 아리아리해4348 18/01/01 4348
114102 [질문] 크롬이 기본일 때 익스플로러 주소 바로가기를 어떻게 만들죠? [4] 솔지1952 18/01/01 1952
114101 [질문] (삭제예정)무단횡단 교통사고 질문입니다 [8] 삭제됨2004 18/01/01 2004
114100 [질문] 스타 1 전적이 프로필과 다르네요? [1] 이현규1640 18/01/01 1640
114099 [질문] 신과함께 보고 왔는데 배우들 연기력 관련 간단한 질문 [5] 치느2322 18/01/01 2322
114098 [질문] 근로계약서 및 주휴수당 질문드립니다.(추후 개인정보부분만 삭제) [4] 문지기문지기문열2924 18/01/01 2924
114097 [질문] 스팀 게임 질문입니다! [10] 40대 유저1922 18/01/01 1922
114096 [질문] 갤S8+ 구매 타이밍 나쁠까요?? [13] 자바초코칩3031 18/01/01 3031
114095 [질문] 시대상을 반영한 연대기형 영화 추천 부탁드립니다. [9] FoxHole1590 18/01/01 1590
114094 [질문] 연기가 혹시 진짜 쩌는 드라마 추천좀 해주실수있으신가요? [31] 삭제됨3148 18/01/01 3148
114093 [질문] 스마트폰에서는 왜 이게 안되나요? [4] kpmmh2397 18/01/01 2397
114092 [질문] 우리나라가 정말로 영국+미국음악이 세계에서 가장 인기없는 나라일까요? 그렇다면 그 이유는? [13] bigname3269 18/01/01 3269
114091 [질문] 듀얼모니터(서브) 트위치 밀림현상 [3] 배틀그라운드4295 18/01/01 4295
목록 이전 다음
댓글

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