요깨비's LAB

[hacker-rank, 문자열, Java] Two Characters 본문

알고리즘(Java)/문자열처리

[hacker-rank, 문자열, Java] Two Characters

요깨비 2021. 10. 5. 21:15

https://www.hackerrank.com/challenges/two-characters/problem

 

https://www.hackerrank.com/challenges/two-characters/problem

 

www.hackerrank.com

 

1. 문자열을 한번 순회하여 사용된 Alphabet을 구한다.(Set 사용)

2. set의 알파벳을 배열에 담는다.

3. 알파벳 배열에서 2가지 알파벳 조합을 뽑은다음 문자열을 순회

3 - 1. Stack에 조합에 포함된 문자열을 넣는데, 만약 똑같은 문자가 연속으로 들어와있을경우 조건에 불일치하므로 isComplete false로 설정한 뒤 break

3 - 2. 문자열 끝까지 잘 담겼다면 이전 성공값의 문자열 길이와 비교하여 값 업데이트 혹은 그대로 두기

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;

import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

class Result {

    /*
     * Complete the 'alternate' function below.
     *
     * The function is expected to return an INTEGER.
     * The function accepts STRING s as parameter.
     */

    public static int alternate(String s) {
        // Write your code here

        char[] carr = s.toCharArray();
        Set<Character> alphabetSet = new HashSet<>();
        int carrLen = carr.length;

        for (char c : carr) {
            alphabetSet.add(c);
        }

        int idx = 0;
        int alphabetSize = alphabetSet.size();
        char[] alphabets = new char[alphabetSize];
        for (Character c : alphabetSet) {
            alphabets[idx++] = c;
        }

        int max = 0;
        for (int i = 0; i < alphabetSize; i++) {
            for (int j = i + 1; j < alphabetSize; j++) {
                int count = 0;
                Stack<Character> stack = new Stack<>();
                char c1 = alphabets[i];
                char c2 = alphabets[j];
                int stackSize = 0;

                boolean isComplete = true;
                for (int k = 0; k < carrLen; k++) {
                    if (carr[k] == c1 || carr[k] == c2) {
                        if (stack.isEmpty()) {
                            stack.push(carr[k]);
                            stackSize++;
                        } else if (!stack.isEmpty() && stack.peek() == carr[k]) {
                            isComplete = false;
                            break;
                        } else if(!stack.isEmpty() && stack.peek() != carr[k]) {
                            stack.push(carr[k]);
                            stackSize++;
                        }
                    }
                }

                if(isComplete) {
                    max = max < stackSize ? stackSize : max;
                }
            }
        }

        return max;
    }

}

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int l = Integer.parseInt(bufferedReader.readLine().trim());

        String s = bufferedReader.readLine();

        int result = Result.alternate(s);
        System.out.println(result);

        bufferedWriter.write(String.valueOf(result));
        bufferedWriter.newLine();

        bufferedReader.close();
        bufferedWriter.close();
    }
}

'알고리즘(Java) > 문자열처리' 카테고리의 다른 글

[hacker-rank, 문자열, Java] Strong Password  (0) 2021.10.05
Comments