1 분 소요

1. 문제

https://www.acmicpc.net/problem/1668

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

안타깝게도, 높이가  트로피가 높이가 작은 트로피의 왼쪽에 있다면,
높이가 작은 트로피는  트로피에 가려서 보이지 않게 된다.
트로피는 자기의 앞에 (보는 사람의 관점에서)
자기보다 높이가 작은 트로피가 있을 때만 보이게 된다.
민식이는 선반을 180 회전시켜서 트로피가 보이는 개수를 변하게  수도 있다.

선반위에 올려져 있는 트로피의 높이가 주어졌을 ,
왼쪽에서 봤을  보이는 개수와,
오른쪽에서 봤을  보이는 개수를 출력하는 프로그램을 작성하시오.

// 입력
첫째 줄에 트로피의 개수 N (1  N  50) 주어진다.
둘째 줄부터 N개의 줄에 왼쪽의 트로피부터 차례대로 높이가 주어진다.
트로피의 높이는 100보다 작거나 같은 자연수이다.

// 출력
첫째 줄에 왼쪽에서 봤을  보이는 개수,
둘째 줄에 오른쪽에서 봤을  보이는 개수를 출력한다.

// 예제 입력 1
5
1
2
3
4
5

// 예제 출력 1
5
1

// 예제 입력 2
4
5
5
5
5

// 예제 출력 2
1
1

// 예제 입력 3
5
1
2
5
2
1

// 예제 출력 3
3
3

// 예제 입력 4
7
1
4
2
5
3
7
1

// 예제 출력 4
4
2


2. 핵심 아이디어

  • 선반 위에 올려져 있는 트로피들에 대해서 왼쪽, 오른쪽에서 봤을 때 보이는 트로피의 수를 각각 구함
  • 트로피의 개수 N이 최대 50이므로 단순히 구현

baekjoon-1668


3. Python 문제풀이

import sys

def ascending(arr) :
  now = arr[0]
  result = 1
  for i in range(1, len(arr)) :
    if now < arr[i] :
      result += 1
      now = arr[i]
  return result

n = int(sys.stdin.readline())
arr = []

for _ in range(n) :
  arr.append(int(sys.stdin.readline()))

print(ascending(arr))
arr.reverse()
print(ascending(arr))


4. Java 문제풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;

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[] trophy = new int[n];

    for (int i=0; i<trophy.length; i++) {
      trophy[i] = Integer.parseInt(br.readLine());
    }

    int leftMax = 0;
    int left = 0;

    for (int i=0; i<trophy.length; i++) {
      if (leftMax < trophy[i]) {
        left += 1;
        leftMax = trophy[i];
      }
    }

    int rightMax = 0;
    int right = 0;

    for (int i=trophy.length-1; i>=0; i--) {
      if (rightMax < trophy[i]) {
        right += 1;
        rightMax = trophy[i];
      }
    }

    System.out.println(left);
    System.out.println(right);
  }
}

댓글남기기