woogie   3년 전

안녕하세요 힌트를 얻어서 문제를 풀었으나 이해안가는 부분이 있어서 질문 드립니다.

질문 부분은 코드에 주석으로 

//질문1 //질문2 표시했습니다.

첫번째 질문 입니다.

//질문1에 빨간구슬을 while문으로 한방향으로 움직이고 멈출때까지 움직이는 코드 입니다.

if(map[next_ry][next_rx] != '#' && map[next_ry][next_rx] != 'O') 이후

else에서 다음좌표가 벽일때 이미 if문에 다음좌표가 저장되어 있으니 

단순히 break를 써서 빠져나오면 되지 않나요?

다음 코드가 왜 있어야 하는지 모르겠습니다... 

next_by -= directY[dir]; next_bx -= directX[dir]; 

단순히 빼보니 답이 틀리더군요 ㅠ  

두번째 질문 입니다.

//질문2에 빨간구슬과 파란구슬이 같은 위치에 있을 경우 예외처리 부분 입니다.

처음에 좌표로 같다고 하기 위해 map[next_ry][next_rx] == map[next_by][next_bx]으로 했으나 틀리게 나오더군요

이 코드가 

next_ry == next_by && next_rx == next_bx

와 같은 의미 아닌가요?

도움 주시면 감사하겠습니다!

asker5325   3년 전

질문 1)

break로 처리하고 공이 아래와 같은 상태로 있을 때

# # #

# R #

# B #

# # #

공이 위로 올라가게 기울인다면 76번 째 줄 직전의 상태는

# (R,B) #

# . #

# . #

# # #

로 됩니다. 이 때 파란 공이 이동한 거리가 더 크니 83번 째 줄을 수행하여

# R #

# B #

# . #

# # #

상태가 되고 이 상태가 큐에 들어가게 됩니다. 이는 실제론 불가능한 상황이므로 오답을 낼 수 있다고 생각됩니다.


질문 2)

질문 1)에서 제시했던 초기상태를 봤을 때, 오른쪽으로 굴러가게 기울인다면 공은 서로 다른 위치에 있지만 (map[next_ry][next_rx] == map[next_by][next_bx]) 값은 true를 반환하게 됩니다.

woogie   3년 전

그동안 정신없어서 지금 확인했네요 ㅠ 

깔끔한 답변 감사합니다 ! 제대로 알고갑니다 !

다시 열심히 시작해야겠어요

댓글을 작성하려면 로그인해야 합니다.