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);
  }
}

댓글남기기