[Java] SWEA 햄버거 다이어트 & 농작물 수확하기

Lee GaEun·2025년 5월 21일

[Java] 알고리즘

목록 보기
78/93

5215 햄버거 다이어트 문제 링크

#1


import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;

class Solution
{
    static int N;
    static int maxCal;
    public static void main(String args[]) throws Exception
    {
        //Scanner sc = new Scanner(System.in);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int T;
        T=Integer.parseInt(st.nextToken());

        for(int test_case = 1; test_case <= T; test_case++)
        {
            st = new StringTokenizer(br.readLine());
            N = Integer.parseInt(st.nextToken());
            maxCal = Integer.parseInt(st.nextToken());
            int[] score = new int[N];
            int[] cal = new int[N];
            for(int i=0; i<N; i++) {
                st = new StringTokenizer(br.readLine());
                score[i] = Integer.parseInt(st.nextToken());
                cal[i] = Integer.parseInt(st.nextToken());
            }

            int answer = dfs(score, cal, 0, 0, 0);
            System.out.println("#"+test_case+" "+answer);
        }
    }

    static int dfs(int[] score, int[] cal, int totalS, int totalC, int level) {
        if(level==N) return totalS;
        
        int a = totalS;
        if(totalC+cal[level]<=maxCal) {
            a += score[level];
            totalC += cal[level];
            totalS = Math.max(dfs(score, cal, a, totalC, level + 1), totalS); // 선택
            a -= score[level];
            totalC -= cal[level];
        }
        totalS = Math.max(dfs(score, cal, a, totalC, level+1), totalS); // 노선택

        return totalS;
    }
}

  • 빽트래킹 문제인 듯
  • 이것도 오랜만에 하니까 오래 걸렸네..
  • level 체크를 이상하게 해서 그거 잡느라 오래 걸렸음

2805 농작물 수확하기 문제 링크

#2

15분


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
    public static void main(String args[]) throws Exception
    {
        //Scanner sc = new Scanner(System.in);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T;
        T=Integer.parseInt(br.readLine());


        for(int test_case = 1; test_case <= T; test_case++)
        {
            int N = Integer.parseInt(br.readLine());
            int[][] map = new int[N][N];
            String a;
            for(int i=0; i<N; i++) {
                a = br.readLine();
                for(int j=0; j<N; j++) {
                    map[i][j] = a.charAt(j) - '0';
                }
            }

            int answer = 0;
            int start = N/2;
            int mid = N/2;
            int end = N/2;
            for(int i=0; i<N/2; i++) {
                while (mid<=end) {
                    answer += map[i][mid];
                    mid++;
                }
                start--;
                end++;
                mid = start;
            }
            for(int i=N/2; i<N; i++) {
                while (mid<=end) {
                    answer += map[i][mid];
                    mid++;
                }
                start++;
                end--;
                mid = start;
            }

            System.out.println("#"+test_case+" "+answer);
        }
    }
}

  • 뭔가 별찍기 상위 문제같은 느낌?
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글