AMUSEMENTPARK 질문 swg0110 아래코드로 실행을 해 봤는데 오답이 발생합니다. 오답을 찾아보려고 했으나 저는 암만 봐도 찾을 수가 없어서 질문을 올립니다.ㅠㅠ 주석은 다 달아놨으니 혹시 코드에러를 찾아 주실 분 있으시면 정말 감사하겠습니다. 감사합니다 #include <iostream> #include <string.h> #include <math.h> using namespace std; int mark[20]; int ridxlist[400]; int cidxlist[400]; int rstposlist[400]; bool is_visible(int minrow, int mincol, int maxrow, int maxcol); int main() { int rownum, colnum, initpos; cin >> rownum >> colnum >> initpos; memset(mark, 0, sizeof(mark)); int poscnt = 0; for (int i = 0; i < rownum; i++) { for (int j = 0; j < colnum; j++) { int curid = 0; cin >> curid; if (curid == 0) continue; // ridxlist, cidxlist 에 position들의 row idx, colume idx 를 저장 int idx = curid - 1; ridxlist[idx] = i; cidxlist[idx] = j; // row 별로 position 존재여부를 integer array에 bit manipulation 으로 저장 mark[i] |= (1L << j); // poscnt에 valid 한 position의 개수를 저장합니다. poscnt = max(curid, poscnt); } } int midx = initpos - 1; int diff = initpos - 1; int rstcnt = 0; while (midx < poscnt) { int oridx = ridxlist[midx - diff]; int ocidx = cidxlist[midx - diff]; int mridx = ridxlist[midx]; int mcidx = cidxlist[midx]; if (is_visible(min(mridx, oridx), min(mcidx, ocidx), max(mridx, oridx), max(mcidx, ocidx))) { rstposlist[rstcnt] = midx - diff + 1; rstcnt++; } midx++; } cout << rstcnt << endl; int rstidx = 0; while (rstidx < rstcnt) { cout << rstposlist[rstidx] << endl; rstidx++; } return 0; } // 입력으로 주어진 영역에 장애물이 있는지 검사합니다. (없으면 true, 있으면 false) bool is_visible(int minrow, int mincol, int maxrow, int maxcol) { // row나 column둘 중 하나라도 idx차이가 1일 경우에는 장애물이 없다는 뜻으로 true를 return if (((maxrow - minrow) == 1) || ((maxcol - mincol) == 1)) return true; // row나 column idx 차이가 0이면 그 라인을 아닐경우 그 사이에 있는 라인들을 검사하도록 minrow, maxrow etc 를 수정 int rdiff = ((maxrow - minrow) == 0)? 0 : 1; int cdiff = ((maxcol - mincol) == 0)? 0 : 1; minrow += rdiff; mincol += cdiff; maxrow -= rdiff; maxcol -= cdiff; int rowidx = minrow; unsigned int rstflag = 0; unsigned int mask = (~((unsigned int)(-1) << (maxcol - mincol + 1))) << mincol; // 검사하고 싶은 column 영역에만 bit가 켜지도록 mask변수를 설정 while (rowidx <= maxrow) { rstflag |= mask & mark[rowidx]; rowidx++; } return (rstflag == 0); } -------------- 8년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
swg0110
아래코드로 실행을 해 봤는데 오답이 발생합니다. 오답을 찾아보려고 했으나 저는 암만 봐도 찾을 수가 없어서 질문을 올립니다.ㅠㅠ
주석은 다 달아놨으니 혹시 코드에러를 찾아 주실 분 있으시면 정말 감사하겠습니다. 감사합니다
8년 전