자유 게시판 / Forum

카페 2 100점을 맞았긴 했는데 지금 생각해보니까 오류가 날 수 있는 코드였습니다.

by rhs0610, 10월 4일, 18:05

다음, 이전 손님을 가리키는 좌석 클래스 포인터를 내장하는 좌석 클래스를 선언하고 좌석 배열, 손님 자리를 가르키는 손님 좌석 포인터 벡터를 사용하였는데
1. 손님 벡터[0]부터 끝까지 다음 손님과의 거리를 비교하며 손님의 위치를 지정해주는 식으로 하였는데 첫 손님이 erase가 되면 에러가 남.
2. 그래서 손님을 빼줄 때 erase가 아닌 마지막 원소와 스왑하여 pop_back으로 빼주는 방식으로 바꿨는데 이 경우 0번 자리에 제일 빠른 좌석이 아닌 다른 좌석이 들어갈 수 있어서 문제가 생김.
3. 그래서 자리 찾기를 스타트하는 좌석을 찾는 과정을 좌석 배열 0번부터 손님이 앉아있는 가장 빠른 자리를 찾는 것으로 바꿈. 결과적으론 100점이 나옴.
그런데 지금 생각해보니까 만약 총 좌석이 10개가 있고 현재 좌석 상황이 4, 9번에 손님이 있는 상황에서 새 손님이 들어온다면 저의 코드는
일단은 손님이 있는 좌석 중 가장 빠른 자리는 4번이니 4번부터 스타트를 하여서
4->9 거리는 5, 따라서 앉을 자리는 4+5/2 = 6번으로 정한 다음 9->4 거리는 5이므로 길이가 더 길지 않으므로 6번 자리에 손님을 배정할 것입니다.
하지만 실제로는 9번에서 스타트할 경우 1번 자리에 배정을 해줘야 하며 1번이 6번보다 더 빠른 자리이므로 1번에 배정을 하는 것이 맞습니다.
다행히 테스트케이스에는 이런 경우가 없었던지 100점을 맞긴 했는데 지금 생각해보니 철렁하네요.

코드를 안 보여주고 글로만 설명하려니까 상당히 힘드네요...
다들 다음 과제도 잘 하시길 바랍니다!