본문 바로가기
프로그램/Java 1000제

Java 1제] 2019년 한국정보올림피아드 1차대회 초등부 1번 - 막대기

by 건티 2021. 7. 9.
728x90

문제] [유형3] 1번 - 막대기(100점)

모든 언어에 대해 시간 제한 1초, 메모리 제한 512MB입니다.

 

아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 6, 9, 7, 6, 4, 6 이다. 일렬로 세워진 막대기를 오른쪽에서 보면 보이는 막대기가 있고 보이지 않는 막대기가 있다. 즉, 지금 보이는 막대기보다 뒤에 있고 높이가 높은 것이 보이게 된다. 예를 들어, 그림과 같은 경우엔 3개(6번, 3번, 2번)의 막대기가 보인다.

 

N개의 막대기에 대한 높이 정보가 주어질 때, 오른쪽에서 보아서 몇 개가 보이는 지를 알아내는 프로그램을 작성하려고 한다.

 

입력형식

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 막대기의 개수를 나타내는 정수 N(2≤N≥100,000)이 주어지고 이어지는 N줄 각각엔 막대기의 높이를 나타내는 정수 h(1≤h≥100,000)가 주어진다.

 

출력형식

표준 출력으로 오른쪽에서 N개의 막대기를 보았을 때, 보이는 막대기의 개수를 출력한다.

 

 

입력 1)

6

6

9

7

6

4

6

 

출력 1)

3

 

 

입력 2)

5

5

4

3

2

1

 

출력 2)

5

 

출처] 2019년도 한국정보올림피아드 1차 대회 2교시 초등부 pdf

 

 

참고풀이]

package e_Testing;

import java.util.*;
import java.lang.*;

public class e_2019_01 {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
      Scanner Insu=new Scanner(System.in);

      //막대기의 개수를 입력받는 변수에 막대기 수 입력.
      int N=Insu.nextInt();
      if (N<2 || N>100000) System.exit(0);

      int[] Arr=new int[N];//막대기 수만큼 배열을 선언.
      int chk;//막대기 크기 체크할 변수
      int cnt;//체크한 막대기보다 큰 막대기 수 세는 변수
      int i;//반복변수

      //막대기 수에 대한 각 막대기 크기를 입력한다.
      for(i=0;i<N;i++)
      {
         Arr[i]=Insu.nextInt();
         if(Arr[i]<1 || Arr[i]>100000) System.exit(0);
      }

      cnt=1;//보이는 면 카운트 한다.
      //보는 방향에서 마지막 면은 보이므로 이것 보다는 커야한다.
      chk=Arr[N-1];
      //이미 첫번째 면은 체크가 되었으니 다음 막대기 부터 체크한다.
      for(i=N-2;i>=0;i--)
         if(Arr[i]>chk) {
            chk=Arr[i];
            cnt++;
         }

      //결과 출력
      System.out.println(cnt);

   }

}

 

참고풀이 결과]

 

 

 

대한민국의 아름다운 영토, 독도

 

 

 

반응형

댓글