ZEROONE 푸는중에 질문 드립니다. KimHansol 문제풀이에 제대로 접근하는건 아닌 것 같지만 그냥 취미삼아 한문제씩 풀어보는거니 알고리즘과 관련된 답변은 안해주셨으면 합니다... 혼자 끙끙거리면서 풀어내는걸 좋아해서요.. . . 아래부터는 궁금한 점입니다..코딩에서 막힐거라곤 생각도 안했는데.. 막혔네요.. 예를들어 수열이 "00001111"이라고 할때, indextable[][]이라는 배열에 {0,3} {4,7}이런식으로 연속된 0과 1의 범위를 가상의 테이블에 넣어두고, i,j값은 테이블의 값만 참조해서 Yes,No를 결정하려고 합니다. 그런데 이 테이블 만드는 과정에 문제가 생겼습니다. 아래 코드를 실행시키고 수열 입력 후에 table에 들어간 값을 보니 원하는 값이 들어가있지 않네요. 예를들어 "010" 이 수열이라 하면, {0,0} {1,1} {2,2} 가 들어가야 할텐데 {0,1} {1,2} {2,2} 가 들어갑니다.. 중단점 넣고 값 따라가봐도 별 이상없이 동작하는것 같은데, cout시켜보면 값이 이상하게 들어가있네요.. 아래는 전체 코드입니다.. 메인함수의 while(n--)부터는 작성하다 말아서 넘어가셔도 됩니당.. #include <iostream> #include <string> using namespace std; #define ARRYSIZE 1000001 //global var char sequence[ARRYSIZE]; int indexTable[ARRYSIZE][1]; string returnString; int makeIndexTable(void) { int indexSize = 0; int i=0; while(true) { if(sequence[i] == '\0') break; else { indexTable[indexSize][0] = i; while(true) { //연속적으로 같은 문자열이면 if(sequence[i] == sequence[i+1]) { i++; continue; } //다른 문자나 널문자 발견시 else { indexTable[indexSize][1] = i; i++; break; } } indexSize++; } } return indexSize; } int main(void) { int i, j, n; cin >> sequence; cin >> n; int indexSize = makeIndexTable(); /*임시*/ for(int x=0; x<indexSize; x++) cout<< indexTable[x][0] << " " << indexTable[x][1] << endl; /*임시*/ while(n--) { cin >> i >> j; if(i > j) { int temp = i; i=j; j=temp; } returnString = "No"; for(int index=0; index<indexSize; index++) { if(i <= indexTable[index][0]) { if(j <= indexTable[index][1]) returnString = "Yes"; break; } } cout << returnString << endl; } } 글 읽어주신 모든분께 감사드립니다. 11년 전
3개의 댓글이 있습니다. Kureyo int indexTable[ARRYSIZE][1];를 int indexTable[ARRYSIZE][2];로 바꿔보세요 11년 전 link KimHansol 으앜...................감사합니다.. 어제 함수만 뚫어지게 쳐다봤었네요;; 11년 전 link KimJJ 이런 종류 문제(원하는 값이 아닌 이상한 값이 들어가는 문제)의 십중팔구가 배열 범위 초과 문제입니당. ASSERT문을 이용해서 디버그하는 것도 한 방법이고, 배열 대신 vector를 사용하면 런타임 단계에서 오류를 내는 라이브러리도 있습니다. 11년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
KimHansol
문제풀이에 제대로 접근하는건 아닌 것 같지만
그냥 취미삼아 한문제씩 풀어보는거니 알고리즘과 관련된 답변은
안해주셨으면 합니다... 혼자 끙끙거리면서 풀어내는걸 좋아해서요..
.
.
아래부터는 궁금한 점입니다..코딩에서 막힐거라곤 생각도 안했는데..
막혔네요..
예를들어 수열이 "00001111"이라고 할때,
indextable[][]이라는 배열에 {0,3} {4,7}이런식으로
연속된 0과 1의 범위를 가상의 테이블에 넣어두고,
i,j값은 테이블의 값만 참조해서 Yes,No를 결정하려고 합니다.
그런데 이 테이블 만드는 과정에 문제가 생겼습니다.
아래 코드를 실행시키고 수열 입력 후에 table에 들어간 값을 보니
원하는 값이 들어가있지 않네요.
예를들어 "010" 이 수열이라 하면,
{0,0} {1,1} {2,2} 가 들어가야 할텐데
{0,1} {1,2} {2,2} 가 들어갑니다..
중단점 넣고 값 따라가봐도 별 이상없이 동작하는것 같은데,
cout시켜보면 값이 이상하게 들어가있네요..
아래는 전체 코드입니다..
메인함수의 while(n--)부터는 작성하다 말아서
넘어가셔도 됩니당..
글 읽어주신 모든분께 감사드립니다.
11년 전