[Java 알고리즘] ToCharArray() 함수를 활용하여 문제풀이
- 기타 / 알고리즘
- 2021. 1. 30.
ToCharArray() 함수는 String을 Char[]을 return 한다. 그래서 향상된 for문으로 한자리수씩 꺼낼 수 있다.
주로 String 값의 형식을 알아내는데 사용되고, 아래 문제에서는 ( )의 개수를 알아내는데 사용 되었다.
[문제]
유효한 () 만 return, 만약에 "("가 뒤에 ")"가 없거나 " )" 가 먼저 나오는 경우는 제거 해야함.
package public class ToCharArrayExaple {
public static void main(String[] args) {
// String s = "(a(b(c)d)";
// String s = "(((a(b(c(e(f)d))";
// String s = "in(f(lea)r)n)";
// String s = "a)b(c)d";
// String s = "a)b(c)d";
// String s = "a)b(c)d)";
// String s = "(()))";
// String s = "(()";
String s = ")()(";
System.out.println(new ToCharArrayExaple().solve(s));
}
public String solve(String str) {
// () 개수 알아내기 위한 용도
StringBuilder sb = new StringBuilder();
// 출력용도
StringBuilder result = new StringBuilder();
int openBrace = 0;
// ( ) 개수 알아내기
// toCharArray() => char[] return
for(char a : str.toCharArray()) {
if(a == '(') {
openBrace++;
} else if(a == ')') {
// openBrace가 0인데 )가 나오면 쓸모가없다.
if(openBrace==0) continue;
openBrace--;
}
sb.append(a);
}
for(int i = sb.length()-1; i>=0; i--) {
if(sb.charAt(i) == '(' && openBrace != 0) {
openBrace--;
continue;
}
// 앞에서 부터 저장하면 )( 나온다.
result.append(sb.charAt(i)).reverse();
}
return result.toString();
}
String 값이 ")()(" 일때 result를 앞에서 부터 저장한다면 )( 가 출력 되므로 뒤에서 부터 저장해야 한다. 말로만해선 이해가 안되니 앞에서 부터 저장해본다음 디버깅을 해봐야 한다.
참고]
인프런 강의 / 코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바) / 푸샵맨 코딩스터디
'기타 > 알고리즘' 카테고리의 다른 글
[Java] BufferedReader, StringTokenizer 클래스 사용방법, 백준 4344번 문제 풀이 (0) | 2021.12.13 |
---|---|
[Java 알고리즘 String] indexOf(), substring() 함수의 개념과 코딩 (3) | 2021.02.06 |
[Java 알고리즘] 알고리즘 전략과 charAt(), substring() 함수 활용 문제풀이, String 형인 숫자를 int형으로 변경 방법, StringBuilder 사용이유 (0) | 2021.01.27 |
[알고리즘] 재귀함수의 정의와 조합과 순열 재귀함수로 구현하기 python (0) | 2020.10.17 |
[알고리즘] 기능개발(프로그래머스 문제) python 풀이(스택) (0) | 2020.10.09 |