보이는 학생

아기코딩단2·2022년 8월 2일
0

알고리즘

목록 보기
4/10

보이는 학생
선생님이 N(1<=N<=1000)명의 학생을 일렬로 세웠습니다. 일렬로 서 있는 학생의 키가 앞에
서부터 순서대로 주어질 때, 맨 앞에 서 있는 선생님이 볼 수 있는 학생의 수를 구하는 프로그
램을 작성하세요. (앞에 서 있는 사람들보다 크면 보이고, 작거나 같으면 보이지 않습니다.)
▣ 입력설명
첫 줄에 정수 N이 입력된다. 그 다음줄에 N명의 학생의 키가 앞에서부터 순서대로 주어진다.
▣ 출력설명
선생님이 볼 수 있는 최대학생수를 출력한다.
▣ 입력예제 1
8
130 135 148 140 145 150 150 153
▣ 출력예제 1
5

학생 수를 출력하는 문제이다.
첫 번째 학생은 무조건 보인다 190 160 160 이런 식이면 선생님 입장에서 보이는 학생은 1명일 것이다.
즉 max 값에 첫 번째 학생을 넣어주고 만약 190 200 160 이런 식이면 교체해주면 될 것이다.

<!--my solution-->

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과 - 섹션2 - 2 - 보이는 학생</title>
    </head>
    <body>
        <script>
            function solution(arr) {
            let answer = 1; // 이유 첫 번째 아이는 무조건 보이기 때문에 1부터 시작
            let max = arr[0]; // 첫 번째 아이를 처음 max값에 넣어준다. 이유 첫 번째 아이보다 뒷 아이들이 전부 작으면 안보이기 때문 즉, 기준은 첫 번째 아이
            //이제 for 문 돌면서 비교 & 탐색
            for (let i = 1; i < arr.length; i++) {
                if (max < arr[i]) {
                    answer++;
                    max = arr[i]; // max 를 교체해주면 된다~
          			//여기서 임시변수 쓸까 했는데 생각해보니까 교체한 수를 쓸일이없어서 그냥 바로 바꿨다.
                }
            } return answer;
        }
            let students=[130, 135, 148, 140, 145, 150, 150, 153];
            console.log(solution(students));
        </script>
    </body>
</html>

이문제가 이전 문제보다 쉬웠다. i - 1 과 같은 부분을 많이 접해봐야겠다.


<!--teacher's solution-->

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(arr){         
                let answer=1, max=arr[0];
                for(let i=1; i<arr.length; i++){
                    if(arr[i]>max){
                        answer++;
                        max=arr[i];
                    }
                }
                return answer;
            }

            let arr=[130, 135, 148, 140, 145, 150, 150, 153];
            console.log(solution(arr));
        </script>
    </body>
</html>

처음에 문제의도를 잘못파악해서 배열에서 계속 빼주려고 했다;;; 생고생함;;
다음에는 그렇게도 풀어봐야겠다.

대강 어떻게 풀어야할지 점점 감이온다. 문제 푸는 것이 재밌다ㅎㅎ

이중 for 문을 돌게되면 시간복잡도가 최악일 수 있다는데 그렇게도 풀어봐야겠다~

profile
레거시 학살자

0개의 댓글