인프런 커뮤니티 질문&답변

최정은님의 프로필 이미지
최정은

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

19. 분노 유발자(1차원 배열의 필요성)

질문있습니다.

해결된 질문

작성

·

207

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;

        }

최정은님의 프로필 이미지
최정은

작성한 질문수

질문하기