지뢰 찾기

yongju·2022년 10월 27일
0

Algorithm-weekly-goorm

목록 보기
2/5
post-thumbnail

구름 알고리즘 위클리 [1주차]

문제 (m, n)크기의 행렬과 elment(지뢰-*, 나머지-.)를 입력받아 . 주변의 지뢰 개수를 출력하기

코드

size=input()
m=int(size.split(" ")[0])
n=int(size.split(" ")[1])
store=[]
for row in range(0,n):
  try:
    drawing=input()#**...
    if len(drawing)!=m:
      raise(Exception)
    tmp.append(list(drawing))
  except Exception as e:
    print("크기에 맞는 값을 입력하시오",e)
count=0
for i in range(len(tmp)):
  for j in range(len(list(drawing))):
    if tmp[i][j]!="*":
      #내부
      if (i!=0 and i!=n-1) and (j!=0 and j!=m-1):
        tmp[i][j]=str([tmp[i-1][j-1],tmp[i-1][j],tmp[i-1][j+1],
                    tmp[i][j-1],               tmp[i][j+1],
                    tmp[i+1][j-1],tmp[i+1][j],tmp[i+1][j+1]].count("*"))
      #위 내부 .***.
      elif i==0 and (j!=0 and j!=m-1):
        tmp[i][j]=str([tmp[i][j-1],               tmp[i][j+1],
                    tmp[i+1][j-1],tmp[i+1][j],tmp[i+1][j+1]].count("*"))

      #아래 내부 .***.
      elif i==n-1 and (j!=0 and j!=m-1):
        tmp[i][j]=str([tmp[i-1][j-1],tmp[i-1][j],tmp[i-1][j+1],
                   tmp[i][j-1],               tmp[i][j+1]].count("*"))

      #왼쪽 가장자리
      elif j==0:
      #왼쪽위
        if i==0:
          tmp[i][j]=str([             tmp[i][j+1],
                     tmp[i-1][j],tmp[i-1][j+1]].count("*"))
      #왼쪽 아래
        elif i==n-1:
          tmp[i][j]=str([tmp[i-1][j], tmp[i-1][j+1],
                                  tmp[i][j+1]].count("*"))

      #왼쪽 중간
        else:
          tmp[i][j]=str([tmp[i-1][j],tmp[i-1][j+1],
                                tmp[i][j+1],
                     tmp[i+1][j],tmp[i+1][j+1]].count("*"))
      #오른쪽
      elif j==m-1:
      #오 위
        if i==0:
          tmp[i][j]=str([tmp[i][j-1]
                     ,tmp[i+1][j-1],tmp[i+1][j]].count("*"))
      #오 아래
        elif i==n-1:
          tmp[i][j]=str([tmp[i-1][j-1], tmp[i-1][j],
                    tmp[i][j-1]                 ].count("*"))

      #오 중간
        else:
          tmp[i][j]=str([tmp[i-1][j-1],tmp[i-1][j],
                    tmp[i][j-1],
                     tmp[i+1][j-1],tmp[i+1][j]].count("*"))

for i in range(len(tmp)):
  print("".join(tmp[i]))

코드 설명
1. 크기 (m,n)과 element 입력받기
만약 받은 크기보다 더 많은 수의 element가 들어왔다면 오류메세지 출력

size=input()
m=int(size.split(" ")[0])
n=int(size.split(" ")[1])
store=[]
for row in range(0,n):
  try:
    drawing=input()#**...
    if len(drawing)!=m:
      raise(Exception)
    tmp.append(list(drawing))
  except Exception as e:
    print("크기에 맞는 값을 입력하시오",e)
  1. 주변의 지뢰의 개수 계산(count)하여 행렬 출력


경우를 나누어서 지뢰 개수를 계산하는 데 필요한 element만 가져옴

  1. 최종 tmp 출력
for i in range(len(tmp)):
  print("".join(tmp[i]))

출력예시
입력
출력

profile
AI dev

0개의 댓글