개발 공부~

[배열] 보이는 학생 .java 본문

코딩테스트/기타

[배열] 보이는 학생 .java

머밍 2024. 10. 9. 22:48

설명

선생님이 N명의 학생을 일렬로 세웠습니다. 일렬로 서 있는 학생의 키가 앞에서부터 순서대로 주어질 때, 맨 앞에 서 있는

선생님이 볼 수 있는 학생의 수를 구하는 프로그램을 작성하세요. (앞에 서 있는 사람들보다 크면 보이고, 작거나 같으면 보이지 않습니다.)

입력

첫 줄에 정수 N(5<=N<=100,000)이 입력된다. 그 다음줄에 N명의 학생의 키가 앞에서부터 순서대로 주어진다.

출력

선생님이 볼 수 있는 최대학생수를 출력한다.

예시 입력 1 

8
130 135 148 140 145 150 150 153

예시 출력 1

5

 

 

내 풀이

예시를 보면 현재 인덱스 보다 더 큰 인덱스의 값이 작으면 보이지 않음을 알 수 있다

즉, 배열의 현재 최댓값보다 작은 값이 뒤에 있다면 보이지 않는 것이다

 

1. 맨 앞 사람은 가리는 사람이 없기 때문에 보이는 사람 수를 하나 증가시키고 처음 사람의 키를 max값으로 초기화

2. 현재 값이 max보다 크면 max 갱신, 정답 증가

 

import java.util.Scanner;

public class Main {

    public static void main(String[] args)  {

        Scanner sc = new Scanner(System.in);
        int n= sc.nextInt();

        int[] nums = new int[n];
        for(int i=0;i<n;i++){
            nums[i]=sc.nextInt();
        }

        int answer = 1;//맨 앞 사람은 무조건 보임
        int max = nums[0];//처음 사람의 키를 max값으로
        for(int i = 1;i<n;i++){
            if(nums[i]>max){//max보다 크면 
                answer++;
                max = nums[i];
            }
        }
        System.out.println(answer);
    }


}

 

 

다른 풀이 - 함수형으로

자기 앞에 서있는 학생들보다 크면 보이는 것 = 내 앞의 누군가가 나보다 키가 크거나 같으면 나는 보이지 않음

=> 나는 앞 학생들보다 커야 한다

 

내 풀이와 동일한 알고리즘이지만 함수형으로 구현한 점이 다르다

import java.util.Scanner;

public class Main {
    public int solution(int n, int[] nums){
        int answer = 1, max = nums[0];

        for(int i = 1; i<n; i++){
            if(nums[i] > max){
                answer++;
                max = nums[i];
            }
        }
        return answer;
    }
    public static void main(String[] args)  {
        Main T =new Main();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] nums = new int[n];//n크기의 동적 배열
        for(int i = 0; i < n; i++){
            nums[i] = sc.nextInt();
        }

        System.out.println(T.solution(n, nums));


    }


}

'코딩테스트 > 기타' 카테고리의 다른 글

[배열] 피보나치 수열 .java  (0) 2024.10.10
[배열] 가위 바위 보 .java  (1) 2024.10.10
[문자열] 암호 .java  (2) 2024.10.03
[문자열] 문자열 압축 .java  (0) 2024.10.02
[문자열] 가장 짧은 문자 거리 .java  (0) 2024.09.24