Baekjoon Online Judge
문제
민식이는 “오민식”이라는 팀이름으로 수없이 많은 로봇대회를 우승했다. 따라서 민식이의 집에는 트로피가 많다. 민식이는 트로피를 어떤 선반 위에 올려놨다. 이 선반은 민식이의 방문을 열고 들어가자마자 선반의 왼쪽이 보인다. 다른말로 하자면, 뒤의 트로피가 앞의 트로피에 가려져 있다는 말이다.
안타깝게도, 높이가 큰 트로피가 높이가 작은 트로피의 왼쪽에 있다면, 높이가 작은 트로피는 큰 트로피에 가려서 보이지 않게 된다. 트로피는 자기의 앞에 (보는 사람의 관점에서) 자기보다 높이가 작은 트로피가 있을 때만 보이게 된다. 민식이는 선반을 180도 회전시켜서 트로피가 보이는 개수를 변하게 할 수도 있다.
선반위에 올려져 있는 트로피의 높이가 주어졌을 때, 왼쪽에서 봤을 때 보이는 개수와, 오른쪽에서 봤을 때 보이는 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 트로피의 개수 N (1 ≤ N ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 왼쪽의 트로피부터 차례대로 높이가 주어진다. 트로피의 높이는 100보다 작거나 같은 자연수이다.
출력
첫째 줄에 왼쪽에서 봤을 때 보이는 개수, 둘째 줄에 오른쪽에서 봤을 때 보이는 개수를 출력한다.
예제 입력 | 예제 출력 |
5 1 2 3 4 5 |
5 1 |
4 5 5 5 5 |
1 1 |
5 1 2 5 2 1 |
3 3 |
7 1 4 2 5 3 7 1 |
4 2 |
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt(); // 트로피의 개수
int arr[] = new int[N]; // 트로피의 높이
for (int i = 0; i < N; i++)
arr[i] = in.nextInt();
// 출력
System.out.println(lookLeft(arr));
System.out.println(lookRight(N, arr));
}
// 왼쪽에서 봤을 때 보이는 개수
public static int lookLeft(int arr[]) {
int big = 0;
int count = 0;
for (int n: arr) {
if (n > big) {
big = n;
count++;
}
}
return count;
}
// 오른쪽에서 봤을 때 보이는 개수
public static int lookRight(int N, int arr[]) {
int big = 0;
int count = 0;
for (int i = N - 1; i >= 0; i--) {
if (arr[i] > big) {
big = arr[i];
count++;
}
}
return count;
}
}
트로피의 높이를 배열에 입력 받은 뒤 왼쪽/오른쪽에서 봤을 때 보이는 트로피의 수를 구하는 함수를 만들어서 답을 출력했다. 트로피의 수는 배열의 숫자를 순서대로/역순으로 조사해서 big보다 큰 수가 있다면 big의 값을 바꾸고, count를 증가시키는 방식으로 구했다.
'백준 > JAVA' 카테고리의 다른 글
[Baekjoon/JAVA] 15829번 - Hashing (0) | 2023.01.18 |
---|---|
[Baekjoon/JAVA] 1672번 - DNA 해독 (1) | 2023.01.17 |
[Baekjoon/JAVA] 2444번 - 별 찍기 - 7 (0) | 2023.01.15 |
[Baekjoon/JAVA] 2443번 - 별 찍기 - 6 (1) | 2023.01.14 |
[Baekjoon/JAVA] 2442번 - 별 찍기 - 5 (0) | 2023.01.13 |