보이는 학생
선생님이 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 문을 돌게되면 시간복잡도가 최악일 수 있다는데 그렇게도 풀어봐야겠다~