Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- algorithm
- 코틀린
- DFS
- DP
- BFS
- kotlin
- LEVEL2
- 백준
- Spring
- Java8
- backtracking
- 네트워크
- 모던자바
- 스프링
- 운영체제
- OS
- back-end
- 그래프
- TDD
- 자바
- 자료구조
- java
- 알고리즘
- baekjoon
- 프로젝트
- Brute-force
- 백트래킹
- 프로그래머스
- lambda
- programmers
Archives
- Today
- Total
요깨비's LAB
[hacker-rank, 문자열, Java] Two Characters 본문
https://www.hackerrank.com/challenges/two-characters/problem
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