빠에야는 개발중

과자 많이 먹기 본문

공부/알고리즘 문제

과자 많이 먹기

빠에야좋아 2018. 3. 15. 12:20

과자를 좋아하는 동우는 책상 위에 일렬로 놓아진 과자를 발견하였습니다. 과자에는 맛을 숫자로 평가한 종이가 붙어 있습니다. 동우는 맨 왼쪽부터 순서대로 과자를 먹기로 하였습니다. 동우는 먹을 과자를 고를 때 이전에 먹은 과자보다 맛이 더 좋은 과자만 먹습니다.

제일 처음에 맛이 3인 과자를 먹었다면, 다음에는 4보다 작은 맛의 과자는 먹지 않습니다.

책상위에 놓인 과자의 맛이 입력되면, 동우가 최대 과자를 몇 개를 먹을 수 있는지 반환해주는 eatCookie 함수를 완성하세요.

예를 들어 [1, 4, 2, 6, 3, 4, 1, 5] 가 입력된다면 동우는 1, 3, 5, 6, 8번째 과자(각각의 맛은 1, 2, 3, 4, 5)를 골라 총 5개를 먹을 수 있고, 5개보다 더 많이 먹을 수 있는 방법은 없으므로 5를 리턴하면 됩니다.


이 문제는 "최장 길이 오름차순 수열" 문제와 동치이다. 앞에서부터 순서대로 오름차순이 되는 길이를 구하고, 최대값에 1을 더해주면 된다.

처음에 결과값을 배열의 맨 마지막 요소로 반환했는데 이러면 안된다. 최대값이 위치한 곳이 맨 끝이 아닐 수도 있기 때문이다. 주의해야겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class EatCookie {
    public int eatCookie(int[] cookies) {
        int answer = 0;
        int[] arr = new int[cookies.length];
        arr[0= 1;
        for (int i = 1; i < arr.length; i++) {
            int max = 0;
            for (int j = 0; j < i; j++) {
                if (cookies[j] < cookies[i] && arr[j] > max) {
                    max = arr[j];
                }
            }
            arr[i] = max + 1;
            answer = Math.max(arr[i], answer);
        }
 
        return answer;
    }
 
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        EatCookie e = new EatCookie();
        int[] cookies = { 14263415 };
        System.out.println(e.eatCookie(cookies));
    }
}
 
cs


'공부 > 알고리즘 문제' 카테고리의 다른 글

거스름돈  (0) 2018.03.15
3xn 타일링  (0) 2018.03.15
줄 서는 방법  (0) 2018.03.14
하노이의 탑  (0) 2018.03.14
2xn 타일링  (0) 2018.03.14
Comments