코딩 스쿨에 오신것을 환영합니다~~

질의응답 게시판

 
시간되시면 코드한번 봐주세요
오 * 진 | 2019-02-05
▷ 첨부파일 : mines.py (1042 Byte)      [저장]

코드의 내용을 글로 써보자면

처음에 row 랑 col 로 행,열수를 입력받고

지뢰모양을 사용자가 직접 입력합니다.

점('.') 은 지뢰가 아니고 별('*')은 지뢰인데요

row: 3
col: 3
지뢰설치: .**
지뢰설치: *..
지뢰설치: ..*


위처럼 지뢰모양을 입력하면

2**
*43
12*

이렇게 각각의 점들에 인접한 지뢰의 개수로 바꿔서 출력해주는 프로그램입니다.



제가 이 코드를 만든 과정을 설명해보자면


2중첩리스트의 인덱스로 각각의 요소로 접근해서 
점(.)을 확인해야 될거같다는 생각이 들어서


책에서 많이 본 형태인 
i와 j를 변수로 사용한 2중첩 for문 한묶음 써놓고

점(.) 이 나오면 뭔가 해야되니까 if문 하나 써놓고


그다음에 이제 주변의 지뢰를 검사하는 알고리즘을 코드로 써야되는데


위의 2중 for문에서 사용한 i와 j를 재사용해서 뭔가 간결하게 만들방법이
없을까 생각하다가 뭔가 있을거 같은 느낌적인 느낌은 있는데

한 30분째 생각이 안나서 그냥 새로운 변수 x와 y 로 또다시 2중 for문을 만들고

실행시켜봤는데 out of range 인덱스 에러가 나거나 뭔가 이상해서

if 조건문부분들 수정하거나 추가해서 완성을 시켰습니다.



뭔가 저 4중첩되있는 for문 덩어리를 간단하게 바꿀방법이없을가요

  • 관 * 자
  • 2019-02-05 (17:40)
안녕하세요.
파이썬 공부를 제대로 하고 계시네요. 멋집니다.

지금과 같은 방식으로 프로그래밍하면 머리가 복잡하고 골치아픔을 피할 수 없습니다.

하지만 지뢰찾기와 같은 프로그램은 좀 더 쉬운 방법이 있습니다.

지뢰찾기 게임과 같은 프로그램을 짜기 위해서는 파이썬 패키지 중 
numpy와 scipy와 같은 것을 이용해야 합니다.

numpy는 배열와 행렬을 쉽게 처리할 수 있는 자료 구조를 제공하고, scipy는 과학 계산용 모듈을 제공합니다.

scipy.org 사이트와 구글에서 numpy와 scipy로 검색하여 관련된 자료를 찾아서 공부해 보세요.

그리고 다음의 내용을 참고해 주세요.

1) 지뢰가 있는 위치가 저장되는 2차원 배열
예 :
     0 1 1 0 0
     0 0 1 1 0
     1 0 0 0 1

이런식으로 배열로 저장하면 1은 지뢰가 있고, 0은 지뢰가 없는 곳입니다.
이렇게 저장해 놓으면 지뢰에 개수를 셀 때 주변 배열 원소를 더하면 됩니다.

2. 메모리에 저장되는 것과 화면에 표시되는 것을 달리한다.
화면에 표시할 2차원 배열에는 원래 생각하신대로 .이나 *등을 이용하면 됩니다.

3. 지뢰 개수 카운트
   지뢰 개수를 구하기 위해 if문을 이용하여 누적하는 게 아니라 수학이나 컴퓨터 공학에서 얘기하는 마스크(mask)라는 것이 있습니다.
지뢰찾기에서 마스크는 3x3 마스크가 됩니다. 
이 마스크가 좌에서 우로 할 줄씩 이동하면서 지뢰의 개수를 센 다음 새로운 배열에 저장하는 식으로 하여야 합니다.

대략 제가 설명하고자하는 것을 이해하실 수 있으시지요?

서울에서 부산에 있는 어떤 집을 찾아가는 데 꼭 걸어가거나 자전거를 타고 갈 필요는 없습니다.
KTX나 기차가 어디에서 출발하는 지 출발시간을 알아보고 부산에서 내려서는 버스를 타고 내려서 목적지에 걸어가는 방식을 취해야 겠지요.

프로그래밍을 하는 것도 마찬가지입니다. 

스타트 파이썬으로 기본기는 익히신 것 같으니
지금 단계에서는 mumpy나 scipy와 같은 패키지와 자료 구조 등을 공부하는 것이 좋을 듯 합니다.

numpy와 scipy는 기차와 KTX와 같은 기능을 제공합니다.

궁금하신 점은 또 질문해 주세요.

도움이 되시길....^^