• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

질문있습니다.

21.07.03 11:07 작성 조회수 126

0

19번 분노 유발자 문제의 코드를 강의에서 설명해주신 것과 다르게 작성해보았는데요

배열의 뒤에서부터 최대값을 찾아나가며 cnt에 1씩 더해주는 방법과 다르게

배열의 앞에서부터 비교하는 방법을 사용해보았습니다.

예를 들어 배열의 개수만큼 for문을 이용하여 반복을 하여 이중 반복문을 통해 해당 요소의 뒤에 수들이 모두 해당 요소의 값보다 작은지를 점검한 후 그렇지 않으면 bool형 변수에 false를 저장한 후 break하여 반복문을 탈출하도록 작성하였습니다.

코드는 다음과 같습니다. 채점 프로그램을 돌려보니 맞지 않다는 부분이 있어서 어떤 부분이 문제가 되는지 궁금합니다.

#include <stdio.h>

int main() {

   //freopen("input.txt", "rt", stdin);

   int n, i, k, cnt=0;

   bool flag = true;

   scanf("%d", &n);

   int s[100];

   for(i=0; i<n; i++){

      scanf("%d", &s[i]);

   }

   for(i=0; i<n; i++){

      flag = true;

      for(k=i+1; k<n; k++){

         if(s[i]<s[k]){

            flag = false;

            break;

         }

      }

      if(flag) cnt++;

   }

   printf("%d\n", cnt-1);

   

   return 0;

}

답변 1

답변을 작성해보세요.

1

안녕하세요^^

문제를 읽어보시면 앉은 키가 작은 학생만 시청을 방해합니다. 키가 같으면 방해하지 않습니다.

다음과 같이 고치시면 됩니다.

        if(s[i]<=s[k]){

           flag = false;

            break;

        }