알고리즘(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();
}
}