일기장

2022.09.05.에 쓰는 일기

donggle math 2022. 9. 6. 23:15
728x90

 다시 일기에 대한 일기다. 처음에는 나름 글감으로 발전시킬 여지가 있는 글을 썼지만, 며칠이나 되었다고 일기가 오늘의 감상문이 되어버렸다. 물론 오늘의 감상도 훌륭한 주제지만, 공부한 것을 쓴다는 목적에는 조금 어긋나 있다. 결국 공부를 해야 한다. 그래도 어제 파이썬 코딩 도장의 흥미로운 심사문제를 이상한 방법으로라도 해결해서 그것이라도 쓰려고 한다.(분명 잘 작동하는 것 같은데 심사에서 통과가 안된다.)

 가로와 세로의 크기를 입력하면 지뢰밭과 지뢰밭이 아닌 구역이 만들어지고, 지뢰밭이 아닌 구역은 주위 지뢰의 숫자를 세서 표기하도록 하는 코드를 짜는 것이다. 여러 시행 착오를 거쳤는데, 오류를 해결하는 좋은 방법은 중간중간에 print를 잘 활용하는 것이다. 수학 문제를 풀 때는 어느 곳에 오류가 일어났는지 찾기 위해 맞았다고 생각한 곳도 다시 점검해야 하지만, 코딩은 중간 점검용 print가 제대로 작동한다면 그 전까지의 코드는 신경 쓸 필요 없이 뒤에 있는 오류만 해결해도 괜찮다. 이처럼 하나하나 건설해 간다는 것은 코딩의 큰 매력이다.


import random # random 라이브러리를 불러온다.

a, b=map(int,input().split()) # 두 수를 입력하고 정수 형태로 변환해준다.
mine=['.','*'] # 밭에는 두 가지 종류가 있다. 지뢰가 없는 땅 '.', 지뢰가 있는 땅 '*'
matrix=[] # 지뢰를 설치할 밭 matrix를 세팅해준다.

for i in range(a): # 입력된 숫자 a번 만큼 아래 명령을 반복한다.
    rows=[] # 새로운 줄 rows를 세팅해준다.
    for j in range(b): # 입력된 숫자 b번 만큼 아래 명령을 반복한다.
        c=random.choice(mine) # mine에서 임의로 지뢰 유무를 선택하고 c로 명명한다. c는 j가 변함에 따라 다시 새로운 지뢰로 세팅될 것이다.
        rows.append(c) # c를 rows에 추가해준다.
    matrix.append(rows) # matrix에 완성된 rows를 추가한다. rows는 i가 변함에 따라 다시 새로운 줄로 세팅될 것이다.

# 지뢰밭이 완성되었다!

for i in range(a): # 입력된 숫자 a번 만큼 아래 명령을 반복한다.
    for j in range(b): # 입력된 숫자 b번 만큼 아래 명령을 반복한다.
        d=0 # 주위 지뢰의 개수를 셀 d다.
        minecount=[] # 팔방향으로 지뢰 유무를 조사할 minecount를 세팅해준다.
        if matrix[i][j]=='.': # 지뢰가 없는 땅은 주위를 조사한다.
            for k in range(max(i-1,0), min(i+2,a)): # 위쪽 한 칸, 아래쪽 한 칸을 대상으로 선택하고 
                for l in range(max(j-1,0), min(j+2,b)): # 그중에 왼쪽 한 칸, 오른쪽 한 칸을 대상으로 선택하여
                    minecount.append(matrix[k][l]) # 팔방향+[i][j]위치의 지뢰 유무를 minecount에 집어넣는다.
                d=minecount.count('*') # minecount에 들어있는 지뢰의 개수를 센다.
                matrix[i][j]=d # 지뢰가 없는 땅에 주위에 있는 지뢰의 개수를 기입해준다. d는 j가 변함에 따라 새롭게 세팅될 것이다.

# 지뢰밭에서 지뢰가 없는 땅을 모두 숫자로 대체했다!

for i in matrix: # matrix의 i번째 줄에서
    for j in i: # i번째 줄의 j번째 요소마다
        print(j, end=' ') # j를 출력한다. 보기 편하도록 요소마다 띄어쓰기를 해준다.
    print() # 모든 줄을 출력해서 완성한다.

 


https://dojang.io/mod/quiz/view.php?id=2298 

 

코딩 도장: 사이트에 로그인

사이트의 강좌를 수강하고 학습 효과를 최대한 높이려면 회원 가입이 필요합니다. '회원 가입' 버튼을 클릭한 후 가입 정보를 입력합니다.입력한 이메일 주소로 확인 메일이 즉시 전송됩니다.이

dojang.io

 

728x90