Today Sangmin Learned
article thumbnail
728x90

링크

https://www.acmicpc.net/problem/7576

난이도(solved.ac 참고)

실버1

풀이

음 .. IndexError가 계속 떠서 무엇이 문제인가 했는데, 위 코드는 정답 코드지만 내가 계속 제출했다가 틀린 코드는 마지막 행에서 bfs(m, n)이 아니라 bfs(queue[0][0], queue[0][1])로 넣었었다. 이렇게 되면 상자 내에 토마토가 없을 때, 즉 리스트의 값이 전부 -1 또는 0만 있을 때 -1을 출력할 수 없고 IndexError가 뜨게 된다.

 

풀이 과정

  1. 함수 바깥에서 일단 이중 for문으로 input값을 받아서 만든 리스트(a) 내에 1이 있으면 큐에 그 좌표를 넣는다.
  2. 큐가 있다는 건 결국 1로 바뀐 무엇인가가 존재한다는 뜻이므로, while queue 바로 다음 행에 count 값을 1 추가했다.
  3. 그 아래 큐의 길이만큼 도는 반복문에 대해, x좌표와 y좌표를 빼낸 뒤 (3, 5)와 같은 경우는 y좌표를 3, x좌표를 5로 생각했기 때문에 최초의 x, y값 이후에는 y값이 x 변수로 들어가고 x값이 y 변수로 들어간다.
  4. 그 다음 if문을 통해 토마토가 익지 않았는지, 상자 범위를 벗어났는지파악 후 충족시 그 토마토를 익게 만들고(1로 지정), 큐에 추가했다.
  5. 큐에 값이 없을 때, 즉 모든 상자의 값을 다 순회했을 때 리스트에 0이 있다면(안익은 토마토가 남아있다면) 이것은 모든 토마토를 익게 만들 수 없는 상황이므로(예를 들어 0으로 가는 길이 -1로 막혀있거나 하는 경우) -1을 리턴하고, 그게 아니라면 처음 시작할 때는 count를 세지 않기 때문에 count에서 1을 빼준다.

하.. 시간 너무 오래 걸렸다;

profile

Today Sangmin Learned

@steadily-worked

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!