강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

go122345님의 프로필 이미지
go122345

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3주차 개념강의 중 지옥의 '주사위 윷놀이'.

작성

·

485

0

위의 사진은 제가 짠 소스에서 인덱스로 쓰려구 메모 해둔겁니다.

코드 보실때 없으면 이해하는게 지옥이실거 같아서 올렸어요.

소스코드 주석에는 도착 지점 노드 인덱스가21이라 했는데 그림에서처럼 35입니다. 주석은 무시하세용.

꼭 직접 해보시라구 강의중 말씀하셔서 제한시간 1시간이지만 오기 생겨서 12시간째 붙들고있습니다. 살려주세요 ..ㅠㅜ

http://boj.kr/b3dc30bb0b164a0697f55fe16471aa7a

남이 작성한 코드 보구 이해하는게 쉽지 않은거 같은데 부탁드립니다!

반복문으로 작성했는데, DFS 재귀로 짜려구 하니까 함수가 엄청 꼬여서 중간에 한번 갈아 엎어서 그렇습니다.

강사님 코드 보구 다시 BFS로 도전 해보겠지만 그래두 여태까지 투자한 시간도 있구 질문 게시판에 있는 반례들 전부 출력 되는데

어디 로직이 문제인지 정말 궁금해서 이렇게 질문 드려요.

주석중에 11줄하구 71줄은 무시하셔두 됩니다.

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요. go님 ㅎㅎ 

 

굉장히.. 복잡한 코드네요.. 

 

이런 코드는 정말 디버깅 하기가 힘들어요. 

 

이러한 코드를 해결하는 방법은 둘 중에 하나입니다. 

 - 다시 짜거나

 - 코드를 다시 보면서 불필요한 부분 로직이 잘못된 부분을 찾거나. 

 

일단 이 주사위에 대해 “어떤 말을 움직일건지에 대해” 모든 조합을 구해놓고 한 점 : ok 잘하셨습니다. 

초기화 : ok 잘하셨습니다. 

파란색지점 분기처리 : ok 잘하셨습니다.  

 

But, 

제 생각에는 goo함수가 틀린 것 같은데요. 

 

일단 정리를 좀 해주세요. 

  1. whereishorse[order[I]] : 으로 목표지점을 설정을 하고 “조건”을 먼저 충족시킨 뒤 갈 수 있게 변경
  2. Ison : 이게 왜 필요하죠? whereishorse로 말의 위치는 충분히 파악된 것은 아닌가요? 불필요한 변수는 지워주세요. 
  3. 결론적으로 whereishorse[order[i]] = tmp; 라는 게 반복이 됩니다. “조건”이 충족되면 할당되는 로직으로 변경해주세요. 
  4. mv[] 관련 로직 : 이 문제는 주어진 주사위수에 따라… “말이 이동되는 것 아닌가요?” 어떠한 말을 쓸 것인지는 movewho에다가 잘 담았죠? 이걸 기반으로 즉, 4, 1, 2 3라는 말을 이동할 것인지는 정해놓았고.. 그러면 이렇게 되어야 하는것아닌가요?

for(int i = 0; I < 10; i ++)

 Horse = movewho[I]

 plus주사위 = mv[I]

 

 

윗부분에 대해 고치고 제출해서 맞으면 ok, 

제출했는데도 불구하고 틀리면 다시 정리해서 올려주세요. 

 

감사합니다. 

go122345님의 프로필 이미지
go122345

작성한 질문수

질문하기