LECTURE 문제 오답 질문입니다.

  • bcb2333
    bcb2333

    안녕하세요.
    "자주 하는 실수 모음"을 참고 하여,
    오답으로 의심 되는 부분들을 수정해 보았으나,
    원인을 스스로 찾지 못하여 도움을 요청합니다..

    • 오답 원인으로 추정되어 수정한 내용은 다음과 같습니다.
    1. 테스트 케이스 여러 개가 한번에 입력될 때, 적절히 초기화하지 않는 문제
      @ before code
      string paragraph;

      @ after code
      string paragraph = "";

    2. 문자열 1000자 제한 및 홀수개 입력 미체크
      @ before code
      int paragraphSize = paragraph.size();

      @ after code
      int paragraphSize = paragraph.size();
      if(paragraphSize > 1000 || paragraphSize%2 != 0) {
      exit(0);
      }

    3. STL에서 size()-1 사용시 무한루프 발생 가능성
      @ before code
      int paragraphSize = paragraph.size();
      int loopCount = paragraphSize / 2; // 입력한 문자열에서 비교할 단어 갯수

      for(int i=0; i < loopCount-1; i++) {
          for(int j=i+1; j < loopCount; j++) {
              ...
          }
      }

      @ after code
      int paragraphSize = (int)paragraph.size();
      int loopCount = paragraphSize / 2; // 입력한 문자열에서 비교할 단어 갯수

      // loopCount가 2 이상일 경우(문자열이 4자 이상일 경우) sorting
      if(loopCount > 1) {
          for(int i=0; i < loopCount-1; i++) {
              for(int j=i+1; j < loopCount; j++) {
                  ...
              }
          }
      }
    #include "iostream"
    #include <cstring>
    #include "string"
    
    int main()
    {
        using namespace std;
    
        int strCount;
        cin >> strCount;
        while(strCount--) {
            string paragraph = "";
            cin >> paragraph;
            int paragraphSize = (int)paragraph.size();
            if(paragraphSize > 1000 || paragraphSize%2 != 0) {
                exit(0);
            }
            int loopCount = paragraphSize / 2;      // 입력한 문자열에서 비교할 단어 갯수
    
            // loopCount가 2 이상일 경우(문자열이 4자 이상일 경우) sorting
            if(loopCount > 1) {
                for(int i=0; i < loopCount-1; i++) {
                    for(int j=i+1; j < loopCount; j++) {
                        if(strcmp(paragraph.substr(i*2, 2).c_str(), paragraph.substr(j*2, 2).c_str()) == 1) {
                            swap(paragraph[i*2], paragraph[j*2]);
                            swap(paragraph[i*2+1], paragraph[j*2+1]);
                        }
                    }
                }
            }
            cout << paragraph << endl;
        }
    
        return 0;
    }
    

    10년 전
4개의 댓글이 있습니다.
  • JongMan
    JongMan

    strcmp()이 1, 0, -1 중의 하나만을 반환하는 것은 아닙니다. 문서를 찾아보세요~~


    10년 전 link
  • bcb2333
    bcb2333

    JongMan님 답변 감사합니다.
    특정 함수 사용시, 해당 함수의 인자와 return타입을 숙지하고 사용하는 습관을 가져야 하겠군요..


    10년 전 link
  • wookayin
    wookayin

    덧붙이자면.. C++ string 을 배워두시는것도 좋을것 같습니다 :)


    10년 전 link
  • bcb2333
    bcb2333

    답변이 늦었습니다 좋은사이트 알려주셔서 감사합니다!


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.