티스토리 뷰
반응형
문제
선생님이 N명의 학생을 일렬로 세웠습니다.
일렬로 서 있는 학생의 키가 앞에서부터 순서대로 주어질 때, 맨 앞에 서 있는 선생님이 볼 수 있는 학생의 수를 구하는 프로그램을 작성하세요.
(앞에 서 있는 사람들보다 크면 보이고, 작거나 같으면 보이지 않습니다.)
입력
첫 줄에 정수 N(5<=N<=100,000)이 입력된다. 그 다음줄에 N명의 학생의 키가 앞에서부터 순서대로 주어진다.
출력
선생님이 볼 수 있는 최대학생수를 출력한다.
예시 입력
8
130 135 148 140 145 150 150 153
예시 출력
5
문제 풀이
[첫번째 풀이]
import java.util.Scanner;
public class Main {
public int solution(int number, String[] numbers) {
int count = 0;
int max = 0;
for (int i=0; i<number; i++) {
int n = Integer.parseInt(numbers[i]);
if (max < n) {
count++;
max = n;
}
}
return count;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int number = Integer.parseInt(scanner.nextLine());
String[] numbers = scanner.nextLine().split(" ");
Main main = new Main();
System.out.println(main.solution(number, numbers));
}
}
(Time 524ms / Memory 40MB)
[두번째 풀이]
import java.util.Scanner;
import java.util.stream.Stream;
public class Main {
public int solution(int number, int[] numbers) {
int count = 0;
int max = 0;
for (int i=0; i<number; i++) {
int n = numbers[i];
if (max < n) {
count++;
max = n;
}
}
return count;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int number = Integer.parseInt(scanner.nextLine());
String str = scanner.nextLine();
int[] numbers = Stream.of(str.split(" ")).mapToInt(Integer::parseInt).toArray();
Main main = new Main();
System.out.println(main.solution(number, numbers));
}
}
(Time 818ms / Memory 45MB)
[세번째 풀이]
import java.util.Scanner;
public class Main {
public int solution(int[] numbers) {
int count = 0;
int max = 0;
for (int i=0; i<numbers.length; i++) {
int n = numbers[i];
if (max < n) {
count++;
max = n;
}
}
return count;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = scanner.nextInt();
int[] numbers = new int[count];
for (int i=0; i<count; i++) {
numbers[i] = scanner.nextInt();
}
Main main = new Main();
System.out.println(main.solution(numbers));
}
}
(Time 743ms / Memory 34MB)
- 앞선 문제(https://a-half-human-half-developer.tistory.com/138)와 크게 다를 것이 없어 비슷한 방법을 이용해 첫번째 풀이처럼 풀었더니 시간과 메모리가 왕창 들었다.
- for 문 돌때마다 Integer.parseInt()를 해준 게 원인인가 싶어 두번째 풀이처럼 먼저 String을 int로 변환하여 int 리스트를 만들었는데 시간이 더 걸렸다.
- 세번째 풀이는 스캐너에서 입력 받을 때부터 바로 int 형태로 받아 처리하는 방법으로 짰다. 문제 자체가 시간과 메모리가 많이 드는 작업인가보다.
반응형
'Java > Coding Test' 카테고리의 다른 글
[코딩테스트] 피보나치 수열 (1) | 2022.03.03 |
---|---|
[코딩테스트] 가위 바위 보 (0) | 2022.03.02 |
[코딩테스트] 큰 수 출력하기 (0) | 2022.03.02 |
[코딩테스트] 암호 (0) | 2022.02.28 |
[코딩테스트] 문자열 압축 (0) | 2022.02.27 |