문제
민식이는 “오민식”이라는 팀이름으로 수없이 많은 로봇대회를 우승했다. 따라서 민식이의 집에는 트로피가 많다. 민식이는 트로피를 어떤 선반 위에 올려놨다. 이 선반은 민식이의 방문을 열고 들어가자마자 선반의 왼쪽이 보인다. 다른말로 하자면, 뒤의 트로피가 앞의 트로피에 가려져 있다는 말이다.
안타깝게도, 높이가 큰 트로피가 높이가 작은 트로피의 왼쪽에 있다면, 높이가 작은 트로피는 큰 트로피에 가려서 보이지 않게 된다. 트로피는 자기의 앞에 (보는 사람의 관점에서) 자기보다 높이가 작은 트로피가 있을 때만 보이게 된다. 민식이는 선반을 180도 회전시켜서 트로피가 보이는 개수를 변하게 할 수도 있다.
선반위에 올려져 있는 트로피의 높이가 주어졌을 때, 왼쪽에서 봤을 때 보이는 개수와, 오른쪽에서 봤을 때 보이는 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 트로피의 개수 N (1 ≤ N ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 왼쪽의 트로피부터 차례대로 높이가 주어진다. 트로피의 높이는 100보다 작거나 같은 자연수이다.
출력
첫째 줄에 왼쪽에서 봤을 때 보이는 개수, 둘째 줄에 오른쪽에서 봤을 때 보이는 개수를 출력한다.
풀이
for문을 두개 돌리면서, 좌측 우측으로 각각 시작한다.
좌측 첫번째 트로피부터 우측 마지막 트로피까지 하나씩 검색하면서,
현재까지 가장 높은 트로피보다 새로운 트로피가 높다면 그 트로피는 보이기에, 보이는 트로피를 하나 증가시키고
가장 높은 트로피의 높이를 새로 설정한다.
이후로 나오는 트로피는 방금 비교한 트로피보다 높아야만 이후에 보일 수 있다.
우측에서 좌측으로 보이는 트로피도 똑같이 반복문을 돌린다. 다만 index의 이동방향을 마지막에서 처음으로 설정한다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
int [] arr = new int[n];
int max=0, cnt=0;
for(int i=0;i<n;i++) {
arr[i]=Integer.parseInt(br.readLine());
if(arr[i]>max)
cnt++;
if(arr[i]>max)
max=arr[i];
}
System.out.println(cnt);
max=cnt=0;
for(int i=n-1;i>=0;i--) {
if(arr[i]>max)
cnt++;
if(arr[i]>max)
max=arr[i];
}
System.out.println(cnt);
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
Baekjoon 1356 유진수 JAVA (0) | 2022.05.27 |
---|---|
Baekjoon 4641 Doubles JAVA (0) | 2022.05.27 |
Baekjoon 1076 저항 JAVA (0) | 2022.05.22 |
Baekjoon 4396 지뢰 찾기 JAVA (0) | 2022.05.18 |
Baekjoon 2193 이친수 JAVA (0) | 2022.05.17 |
댓글