[Java] SWEA 원재의 메모리 복구하기 & 부분 수열의 합

Lee GaEun·2025년 5월 22일

[Java] 알고리즘

목록 보기
79/93

1289 원재의 메모리 복구하기 문제 링크

#1

9분


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

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

        for(int test_case = 1; test_case <= T; test_case++)
        {
            String memory = br.readLine();
            int answer = 0;
            char state = '0';
            for(int i=0; i<memory.length(); i++) {
                if(memory.charAt(i) != state) {
                    answer++;
                    state = nowState(state);
                }
            }

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

    static char nowState(char state) {
        if(state == '0') state = '1';
        else if (state == '1') state = '0';
        return state;
    }
}


2817 부분 수열의 합 문제 링크

#1


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

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


        for(int test_case = 1; test_case <= T; test_case++)
        {
            StringTokenizer st = new StringTokenizer(br.readLine());
            N = Integer.parseInt(st.nextToken());
            K = Integer.parseInt(st.nextToken());

            st = new StringTokenizer(br.readLine());
            arr = new int[N];
            for(int i=0; i<N; i++) {
                arr[i] = Integer.parseInt(st.nextToken());
            }

            answer = 0;
            dfs(0, 0);

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

    static void dfs(int total, int level) {
        if(total==K) {
            answer++;
            return;
        }
        if(level==N) return;

        dfs(total+arr[level], level+1);
        dfs(total, level+1);
    }
}

  • dfs로 금방 풀었는데 pass가 안 떠서 고민함
  • 그냥 테케 별로 answer값을 초기화 안 해줘서 문제였음..
  • 시험 때는 이러지말자..
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글