글수 62
막 배우려고 하는 알고리즘 초보단계인데요..
머 문제를 풀다 막히는게 있어서요.. 머 많은 문제를 푸신 분은 아시겟지만
이거 문제요.
원탁의 기사 모두가 용과 싸우고싶어 하지만 많은 군대를 이끌고 가면 용이 미리알아 채기 때문에 기사한명만이 갈 수 있다. 아더왕은 과연 누구를 보내야 하는가 고민에 빠졌다. 그러던 중 랜슬럿이 묘책을 제시하였다. 원탁에 둘러 앉아 있는 기사 n명에게 시계방향으로 차례대로 1번부터 n번의 번호를 부여 한다. 다음 그 중의 임의의 숫자 m을 선택하여 그 번호의 기사를 제외시킨다. 다음 그 기사로부터 시계방향으로 k번째 있는 기사를 제외시키는 작업을 단 한명이 남을때까지 계속한뒤, 그 결과 마지막으로 남는 기사가 용과 싸우러 가는 것이다. 예를 들어 n=8, m=2, k=3인 경우, 2번째 기사가 먼저 제외된후 이어 5번, 8번 기사가 차례대로제외된다. 원탁의 기사의 수 n, 처음 선택한 기사의 번호 m, 다음으로 몇 번째 기사를 제외시킬 것인가 하는 k가 주어질때, 제외되는 기사들의 번호를 순서대로 출력하고, 용과 싸우러 가게 되는 기사의 번호를 출력하는 프로그램을 작성하시오.
<입력 형식>
823
<출력 형식>
25841736
이런식이요.
제가 대충 malloc을 써서 풀긴했는데, 점점 고칠수록 틀려가서요,
고수님들의 틀린부분 지적을 좀 해주세요.ㅜ


일단 틀린점을 하나만 지적하면 1번과 2번 기사가 빠졌을 때 j = (m + (k * i++)) % n; 에서 j = 1이 된다면 if문에서 2번 기사를 다시 제외하게 됩니다. 이런식으로 이미 빠져있는 기사들을 조금 더 고려해보세요.
덧 - queue를 이용해서 풀면 쉽게 풀 수 있습니다.