티스토리 뷰

반응형

 

문제

선생님이 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
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함