• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 코딩테스트관련 질문입니다. 답변주시면 감사하겠습니다. S2

코딩테스트관련 질문입니다. 답변주시면 감사하겠습니다. S2

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #32644

    허수혁
    참가자

    자바스크립트랑 관련없는 질문 드려서 죄송합니다. 

    마땅히 질문할 곳이 생각나지 않아서 선생님에게 질문 드립니다.

    선생님 제가 백준 2667번 문제를 풀다가 return을 쓰지 않을때와 썻을때의 궁금증이 생겨서 질문드립니다.

    아래와 같은 파이썬 코드를 짯습니다.

    n=int(input())
    result=[]
    array=[]
    visited=[ [0]*n for _ in range(n)]
    for i in range(n):
      a=list(map(int,input()))
      array.append(a)

    cnt=0
    dx=[-1,1,0,0]
    dy=[0,0,-1,1]

    def dfs(array,x,y):
      visited[x][y]=1
      global cnt
      if array[x][y]==1:
        cnt+=1
      for i in range(4):
        nx=x+dx[i]
        ny=y+dy[i]
        if nx>=0 and ny>=0 and nx<n and ny<n:
          if array[nx][ny]==1 and visited[nx][ny]==0:
             return dfs(array,nx,ny)
             

    for i in range(n):
      for j in range(len(array[0])):
        if array[i][j]==1 and visited[i][j]==0:
          dfs(array,i,j)
          result.append(cnt)
          cnt=0
         
    for i in range(n):
      for j in range(len(array[0])):
        print(visited[i][j],end=" ")
      print()
     
    print(result)

    여기서 result의 값이 [4, 3, 8, 7, 2] 로 나옵니다.  저는 잘 풀었다고 생각했는데 답이 나오질 않아 다른 사람들 코드를 찾아 봤습니다.

    그랬더니 다들 return을 쓰지 않고 풀더 군요 그래서 저도 따라해봤습니다.

    n=int(input())
    result=[]
    array=[]
    visited=[ [0]*n for _ in range(n)]
    for i in range(n):
      a=list(map(int,input()))
      array.append(a)

    cnt=0
    dx=[-1,1,0,0]
    dy=[0,0,-1,1]

    def dfs(array,x,y):
      visited[x][y]=1
      global cnt
      if array[x][y]==1:
        cnt+=1
      for i in range(4):
        nx=x+dx[i]
        ny=y+dy[i]
        if nx>=0 and ny>=0 and nx<n and ny<n:
          if array[nx][ny]==1 and visited[nx][ny]==0:
            dfs(array,nx,ny)
             

    for i in range(n):
      for j in range(len(array[0])):
        if array[i][j]==1 and visited[i][j]==0:
          dfs(array,i,j)
          result.append(cnt)
          cnt=0
         
    for i in range(n):
      for j in range(len(array[0])):
        print(visited[i][j],end=" ")
      print()
     
    print(result) 이렇게 했더니 [7, 8, 9] 로 정답이 출력되더군요 

     

    저는 뭐가 다른지 모르겠습니다. 인터넷에 찾아봐도 이해가 되는 답변을 찾지 못했습니다. 

    설명해 주시면 감사하겠습니다. 

    #32669

    codingapple
    키 마스터

    return이 있으면 계속 타고들어가며 찾기도 전에 함수를 종료를 시켜주기 때문에 그런 것이 아닐까요 

    #32743

    허수혁
    참가자

    답변 감사합니다.

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠