백준 탐욕 알고리즘 - 2885, 9082(java)

jinvicky·2024년 6월 28일
1

ALG

목록 보기
59/62

문제 시리즈

https://www.acmicpc.net/workbook/view/4380

2885 초콜릿 식사

원하는 초콜릿의 개수를 0으로 만들어 가는 과정이라고 생각해야 한다.
열심히 구현했는데 시간 초과가 났다.
케이스는 나누거나 빼는 것, 둘 중에 하나다.

정답

while(n<k) n= n*2;

        StringBuilder sb= new StringBuilder();
        sb.append(n).append(" ");

        while(k>0){ //원하는 초코값이 0보다 클 동안
            if(k>=n){ // 원하는 초코값이 구매한 초코값보다 크면 => 원한 초코 - 구한 초코
                k-=n; // 6-4= 2 => 2개의 초코가 더 필요함.
//                System.out.println(k);
            }else{
                n/=2; // 구한 초코 / 2
                count++; // 컷팅 횟수 추가
//                System.out.println("나누기" + n); // 그래서 나눔
            }
        }

나의 오답

long half = choco/2;
        long sum = half;
        cutCnt++;
        while(half > 0) {
            if(sum == wChoco) break;
            if(sum < wChoco) { // 4< 6
                half = (int)half/2; // 2가 나옴
                sum = sum + half; // 4+2 = 6
                cutCnt++;
            }
        }

9082 지뢰찾기

이건 약간 dp인가? 생각도 들었고, 풀이가 적었는데 그 중에 하나 보니까

12110
##*##

여기서 ##*##는 걍 br.readLine()만 하고 딱히 저 *의 위치는 의미가 없었다;;
br.readLine()을 해야 입력 줄수가 맞아서 예의상 하는 느낌;;
첫째 자리, 마지막 자리, 그 외, 총 3개의 케이스로 해서 0이 아니면 -1을 한다.
그러다 보면 답이 나오는 게 신기했음

int result = 0;
                for (int j = 0; j < num; j++) {
                    if (j == 0) {
                        if (numArr[j] != 0 && numArr[j + 1] != 0) {
                            numArr[j]--;
                            numArr[j + 1]--;
                            result++;
                        }
                    } else if (j == num - 1) {
                        if (numArr[j - 1] != 0 && numArr[j] != 0) {
                            numArr[j]--;
                            numArr[j - 1]--;
                            result++;
                        }
                    } else {
                        if (numArr[j - 1] != 0 && numArr[j] != 0 && numArr[j + 1] != 0) {
                            numArr[j - 1]--;
                            numArr[j]--;
                            numArr[j + 1]--;
                            result++;
                        }
                    }
                }
profile
일단 쓰고 본다

0개의 댓글