📌 문제 설명
선생님이 N명의 학생을 일렬로 세웠을 때, 앞에서부터 학생들의 키가 주어집니다.
이때, 앞에 서 있는 학생들보다 키가 크면 보이고, 작거나 같으면 보이지 않습니다.
- 선생님이 볼 수 있는 학생의 수를 구하는 프로그램을 작성하세요.
- 입력값은 학생 수 (5 ≤ N ≤ 100,000)입니다.
📝 입력 & 출력
입력
- 첫 번째 줄: 정수 N (5 ≤ N ≤ 100,000)
- 두 번째 줄: N명의 학생 키 (앞에서부터 순서대로 주어짐)
출력
- 첫 번째 줄: 선생님이 볼 수 있는 최대 학생 수 출력
🔸 예제 입력 & 출력
예제 입력 1
8
130 135 148 140 145 150 150 153
예제 출력 1
5
💡 해결 방법
- 현재까지 가장 큰 키를 저장할 변수를 설정합니다.
- 학생의 키를 순차적으로 순회하면서, 지금까지의 최대 키보다 크다면 보이는 학생으로 카운트합니다.
- 최대 키를 갱신하면서 전체 학생 수만큼 반복하여 최종적으로 보이는 학생 수를 구합니다.
💻 코드 구현 (Java)
package partArray;
import java.util.*;
public class Problem2 {
public int solution(int n, int[] arr){
int maxNum = 0;
int count = 0;
for(int i=0; i<n; i++) {
if (arr[i] > maxNum) {
maxNum = arr[i];
count += 1;
}
}
return count;
}
public static void main(String[] args) {
Problem2 T = new Problem2();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for (int i=0; i<n; i++) {
arr[i] = kb.nextInt();
}
System.out.print(T.solution(n, arr));
kb.close();
}
}
📖 코드 설명
1️⃣ 변수 초기화
int maxNum = 0; // 현재까지의 가장 큰 키
int count = 0; // 보이는 학생 수
- maxNum: 학생의 키를 비교할 때 사용합니다.
- count: 보이는 학생의 수를 카운트하는 변수입니다.
2️⃣ 배열 순회 및 카운트
for(int i = 0; i < n; i++) {
if (arr[i] > maxNum) {
maxNum = arr[i];
count += 1;
}
}
- 앞에서부터 키를 확인하여 maxNum보다 큰 학생을 찾으면 count를 증가시킵니다.
- 최대 키 maxNum을 갱신하여 다음 학생들과 비교합니다.
⏳ 시간 복잡도 분석
- 시간 복잡도: O(N) (N: 학생 수)
- 배열을 한 번만 순회하므로 시간 복잡도는 O(N) 입니다.
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 2. Array - 4. 피보나치 수열 (0) | 2025.03.21 |
|---|---|
| 섹션 2. Array - 3. 가위 바위 보 (1) | 2025.03.21 |
| 섹션 2. Array - 1. 큰 수 출력하기 (0) | 2025.03.21 |
| 섹션 1. 문자열 - 12. 암호 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 11. 문자열 압축 (0) | 2025.03.18 |