본문 바로가기
Algorithm/Baekjoon

Baekjoon 1668 트로피 진열 JAVA

by Hunveloper 2022. 5. 27.
728x90
 

1668번: 트로피 진열

민식이는 “오민식”이라는 팀이름으로 수없이 많은 로봇대회를 우승했다. 따라서 민식이의 집에는 트로피가 많다. 민식이는 트로피를 어떤 선반 위에 올려놨다. 이 선반은 민식이의 방문을 열

www.acmicpc.net

문제

민식이는 “오민식”이라는 팀이름으로 수없이 많은 로봇대회를 우승했다. 따라서 민식이의 집에는 트로피가 많다. 민식이는 트로피를 어떤 선반 위에 올려놨다. 이 선반은 민식이의 방문을 열고 들어가자마자 선반의 왼쪽이 보인다. 다른말로 하자면, 뒤의 트로피가 앞의 트로피에 가려져 있다는 말이다.

안타깝게도, 높이가 큰 트로피가 높이가 작은 트로피의 왼쪽에 있다면, 높이가 작은 트로피는 큰 트로피에 가려서 보이지 않게 된다. 트로피는 자기의 앞에 (보는 사람의 관점에서) 자기보다 높이가 작은 트로피가 있을 때만 보이게 된다. 민식이는 선반을 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);
	}
}

 

728x90
728x90

'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

댓글