1. 글씨가 전부다 같은 경우 : -1
  2. 글씨가 전부다 다른 경우 : 글자 수
  3. 팰린드롬인 경우 : 글자수 -1 3가지 경우의 수로 나눠서 코드 짜면 됩니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;

public class boj15927 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        char[] arr = str.toCharArray();
        HashSet<Character> hs = new HashSet<>();
        for (int i = 0; i < arr.length / 2; i++) {
            hs.add(arr[i]);
            if (arr[i] != arr[arr.length - 1 - i]) {
                System.out.println(arr.length);
                return;
            }
        }
        for (int i = arr.length / 2; i < arr.length; i++) {
            hs.add(arr[i]);
        }
        if(hs.size()==1){
            System.out.println(-1);
        }else{
            System.out.println(arr.length-1);
        }

    }
}

'Algorithm > BOJ' 카테고리의 다른 글

백준 1546번. 평균 (Java)  (0) 2022.08.12
백준 11720. 숫자의 합 (Java)  (0) 2022.08.12
[백준 2493] 탑 (Java)  (0) 2022.01.05
[백준 10211] Maximum Subarray (Java)  (0) 2022.01.05
[백준 1759] 암호 만들기 (Java)  (0) 2022.01.02

문제 링크

 

문제 설명

 

풀이 방법

 

풀이 코드

package week1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class BOJ_2493 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine());
        Stack<int[]> stack = new Stack<>();
        for (int i = 0; i < N; i++) {
            int input = Integer.parseInt(st.nextToken());
            while (!stack.isEmpty()) {
                if (stack.peek()[0] > input) {
                    System.out.println(stack.peek()[1] + " ");
                    break;
                } else {
                    stack.pop();
                }
            }
            if (stack.isEmpty()) {
                System.out.println("0 ");
            }
            stack.add(new int[]{input , i + 1});
        }

    }
}

문제링크

 

10211번: Maximum Subarray

크기 N인 정수형 배열 X가 있을 때, X의 부분 배열(X의 연속한 일부분) 중 각 원소의 합이 가장 큰 부분 배열을 찾는 Maximum subarray problem(최대 부분배열 문제)은 컴퓨터 과학에서 매우 잘 알려져 있

www.acmicpc.net

문제 설명

크기 N인 정수형 배열 X가 있을 때, X의 부분 배열 중 원소의 합이 가장 큰 부분 배열 구하기(X의 연속한 일부분)

풀이 방법

구간합 구하는 문제가 주어지면, 누적합을 먼저 떠올린다.

누적 합 < 0이 되는 구간에 dp값을 0으로 초기화해준다. 

누적합이 음수가 되는 순간 그 뒤에 있는 수들은 새로운 누적합(0)을 구하는게 더 최댓값을 가져오기 때문이다.

풀이 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int T = Integer.parseInt(st.nextToken());
        for (int t = 0; t < T; t++) {
            int N = Integer.parseInt(br.readLine());
            int[] num = new int[N];
            int[] dp = new int[N];
            st = new StringTokenizer(br.readLine());
            for (int i = 0; i < N; i++) {
                num[i] = Integer.parseInt(st.nextToken());
            }
            int max = num[0];
            dp[0]=num[0];
            for (int i = 1; i < num.length; i++) {
                if(dp[i-1]<0){
                    dp[i-1]=0;
                }
                dp[i]=dp[i-1]+num[i];
                max = Math.max(max,dp[i]);
            }
            System.out.println(max);
        }
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

백준 1546번. 평균 (Java)  (0) 2022.08.12
백준 11720. 숫자의 합 (Java)  (0) 2022.08.12
백준 15927. 회문은 회문아니야!!(Java)  (0) 2022.08.11
[백준 2493] 탑 (Java)  (0) 2022.01.05
[백준 1759] 암호 만들기 (Java)  (0) 2022.01.02

문제 링크 

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

 

문제 설명

1. C개의 알파벳 중 서로 다른 L개의 알파벳을 구해야한다.

* 이때 최소 한 개의 모음과 최소 두 개의 자음으로 구성되어야한다.

풀이 방법

1. 중복없이 L개를 뽑는 조합 구하기

* 이때 모음(a,e,i,o,u) 과 최소 두개의 자음으로 구성되어 있는지 확인한다.

N과 M(6) 번 문제에서 중복 없이 수열 구했던 문제를 활용했다.

dfs 함수 안에서 for문안의 i=0 부분을 start로 두어, 중복으로 선택하는 것을 피했다.

 

전체 코드

package week1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class boj1759 {

    static int L, C;
    static String[] ans;
    static String[] arr;
    static boolean[] visited;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        L = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        arr = new String[C];
        ans = new String[L];
        visited = new boolean[C];

        for (int i = 0; i < C; i++) {
            arr[i] = st.nextToken();
        }
        Arrays.sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        dfs(0, 0);
    }

    private static void dfs(int index, int start) {

        if (index == L) {
            StringBuilder sb = new StringBuilder();
            int mo = 0, ja = 0;
            for (int i = 0; i < L; i++) {
                if (ans[i].equals("a") || ans[i].equals("e") || ans[i].equals("i") || ans[i].equals("o") || ans[i].equals("u")) {
                    mo++;
                } else {
                    ja++;
                }
                sb.append(ans[i]);
            }
            if (mo >= 1 && ja >= 2) {
                System.out.println(sb);
                return;
            } else {
                return;
            }

        }
        for (int i = start; i < C; i++) {
            if (!visited[i]) {
                visited[i] = true;
                ans[index] = arr[i];
                dfs(index + 1, i + 1);
                visited[i] = false;
            }

        }
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

백준 1546번. 평균 (Java)  (0) 2022.08.12
백준 11720. 숫자의 합 (Java)  (0) 2022.08.12
백준 15927. 회문은 회문아니야!!(Java)  (0) 2022.08.11
[백준 2493] 탑 (Java)  (0) 2022.01.05
[백준 10211] Maximum Subarray (Java)  (0) 2022.01.05

+ Recent posts