jkjan   4년 전

허허..

리눅스 eclipse로 돌리는 것도

ideone에서도 돌리는 것도 정답이 나오는디/..

어디서 반례가 생기는지 도저히 모르겠네요..

로직은 다들 비슷하다시피

배열 입력 받고

치킨집의 좌표를 저장하는 pair<int, int> 벡터 하나 따로 두고

문제의 배열을 입력 받으며 2가 나오면 치킨집 좌표 벡터에 해당 좌표를 넣고 cnt를 올립니다.

치킨 거리 최소 되려면 M보다 작은 수에서도 나올 수 있겠지만 

M이어도 어차피 그 값 나오거나 더 적게 나오니까 (최소값이 되는 최소 치킨집 수를 구하는 게 아니므로)

전체 치킨집 수 cnt에서 M개를 구하는 조합을 돌립니다.

치킨이 있던 곳 중 M개를 0으로 바꾸고 

배열을 쫙 돌면서 1인 거 발견하면 

그 위치에서부터 레이다 음파 쏘는 것마냥 거리를 1부터 하나하나 벌리면서 주변 테두리 사각형만 딱 조사했습니다.

거기서 최소값을 딱 받아서 뭔가 발견되면 그 자체적으로도 min값과 비교합니다.

사각형 테두리에 두 개 이상 있더라도 각각 거리가 다를 수가 있기 때문에 최소만 가져와야 하기 때문이죠.

그리고 거리를 넓히기 전에 만약 치킨집이 발견이 됐다면 더이상 넓히지 않고 탐색을 종료합니다.

왜냐면 제일 가까운 치킨집이 발견됐으므로 더 이상 탐색할 필요가 없기 때문에..

하여간 이렇게 해서 1인 것들의 치킨 거리를 다 더한 다음에

min과 비교해서 적으면 저장하고 아니면 냅두고..

아까 0으로 바꿨던 치킨집 다시 2로 복구시키고

다시 조합으로 돌리고...

하는 게 제 로직입니다.

근데? 런타임 에러네용

배열 인덱스를 이리저리 넘나들어서 인덱스 초과가 나는 것도 아니고

delete 과정에서 뭐가 뻑나는 것도 아니고,,,,

어디서 런타임 에러가 나는지..?

같은 g++ C++14 컴파일러에서도 잘 되는데 백준 것만 안 되네요

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