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
- 순열코드
- 재귀
- 재귀함수
- 자바
- 자바스크립트 이벤트처리
- 후위표기
- 상속
- char to str
- java 내부 클래스
- parseInt()
- 알고리즘 그래프
- 서로소
- jquery dom 계층 선택자
- Java
- Interface
- str to char array
- 자바 재귀 조합
- 자바입출력
- java Collections.sort()
- jquery 속성선택자
- 자바 조합 재귀
- 자바스크립트 이벤트중지
- 순열 재귀
- java lambda
- jquery 이벤트 처리
- jquery 필터선택자
- 알고리즘
- 조합 재귀
- inner class
- 자바 순열 코드
Archives
- Today
- Total
유블로그
[프로그래머스] 괄호변환 본문
[프로그래머스] level2 괄호변환
소요시간 : 1시간4분
문제 중간에
'4-4. u의 첫 번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙입니다.'
이 말을 u를 역순으로 뒤집으라는 말인줄 알고,,,,,,,,, 제출하면 계속 반만 맞길래 왜지 했는데
괄호 방향을 바꾸라는 게 ( -> ), ) -> ( 이거였다.....
이것때문에 시간을 많이 썼다...
문제 자체는 크게 어렵지 않았다.
문제가 하라는 대로만 해주면 되고(process 함수),
올바른 문자열인지 체크하는 함수(isCorrect)와 u,v 로 나누는 함수(splictIdx)만 생각하면 됐었다.
class Solution {
public String solution(String p) {
return process(p);
}
public String process(String p) {
if(p.length() == 0) return "";
if(isCorrect(p)) return p;
int idx = splitIdx(p);
String u = p.substring(0, idx+1);
String v = p.substring(idx+1);
if(isCorrect(u)) return u+=process(v);
else {
StringBuilder sb = new StringBuilder();
sb.append("(").append(process(v)).append(")");
String newU = u.substring(1, u.length()-1);
if(newU.length() > 0) {
StringBuilder newSb = new StringBuilder();
int i = 0;
char c;
while(i < newU.length()) {
if(newU.charAt(i++) == '(') c = ')';
else c = '(';
newSb.append(c);
}
sb.append(newSb);
}
return sb.toString();
}
}
boolean isCorrect(String s) {
int cnt = 0;
for (int i = s.length()-1; i >= 0; i--) {
if(cnt == 0 && s.charAt(i) == '(') return false;
if(cnt > 0 && s.charAt(i) == '(') cnt--;
else if(s.charAt(i) == ')') cnt++;
}
return true;
}
int splitIdx(String s) {
int a = 0, b = 0;
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '(') a++;
else b++;
if(a==b) return i;
}
return s.length()-1;
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] 다음 큰 숫자 (0) | 2021.01.19 |
---|---|
[프로그래머스] 튜플 (0) | 2021.01.18 |
[프로그래머스] 문자열 압축 (0) | 2021.01.18 |
[프로그래머스] 카카오 프렌즈 컬러링북 (0) | 2021.01.15 |
[프로그래머스] 삼각달팽이 (0) | 2021.01.15 |