티스토리 뷰
프로그래머스 60058번 - 괄호 변환
요구사항
1. 문자열이 '('와 ')'로 이루어져있을 때 '('의 개수와 ')'의 개수가 같다면 균형잡힌 괄호 문자열이다.
2. 균형잡힌 괄호 문자열이면서 '('와 ')'의 괄호 짝도 모두 맞을 경우에는 올바른 괄호 문자열이다.
3. 주어진 방법대로 균형잡힌 문자열을 올바른 괄호 문자열로 바꾸어서 반환하라.
요구사항 분석 및 풀이과정
1. 균형잡힌 괄호 문자열인지 검사를 하는 방법은 '(' 문자가 나올 경우 +1, ')' 문자가 나올 경우 -1을 하여 결과가 0인지를 확인하면 된다.
2. 올바른 괄호 문자열인지 검사를 하는 방법 또한 1번과 동일하나 +1, -1을 한 결과가 음수가 되면 짝이 맞지 않는 시점이 발생했다는 것이므로 올바른 괄호 문자열이 될 수 없다는 것을 의미한다.
3. 우리는 균형잡힌 문자열을 올바른 괄호 문자열로 바꾸는 방법 중 문자열을 두 균형잡힌 괄호 문자열로 분해를 하여야하는데, 이 때 분해된 문자열 u, v 중 u는 더이상 분해할 수 없는 균형잡힌 괄호 문자열이여야 한다.
4. 그렇기 때문에, 1번에서 균형잡힌 괄호 문자열인지를 검사를 하면서 처음으로 균형잡히는 시점(+1, -1한 결과가 0인 시점) 때의 위치를 반환하여 주도록 할 것이다. 그 위치를 기점으로 문자열을 나누면 조건에 맞게 두 균형잡힌 괄호 문자열로 나눌 수 있다.
5. 나머지는 주어진 방법대로 옮기면 된다.
소스코드 작성
class Solution {
private boolean valid(String p) {
int count = 0;
for(char v : p.toCharArray()) {
count += (v == '(' ? 1 : -1);
if (count < 0) {
return false;
}
}
return true;
}
private int balancedPos(String p) {
char[] chars = p.toCharArray();
int count = 0;
for(int i = 0; i < chars.length; i++) {
count += (chars[i] == '(' ? 1 : -1);
if (count == 0) {
return i + 1;
}
}
return -1;
}
private String inverse(String p) {
char[] chars = p.toCharArray();
for(int i = 0; i < chars.length; i++) {
chars[i] = chars[i] == ')' ? '(' : ')';
}
return String.valueOf(chars);
}
private String make(String p) {
if ("".equals(p)) {
return "";
}
int balancedPos = balancedPos(p);
String u = p.substring(0, balancedPos);
String v = p.substring(balancedPos);
if (valid(u)) {
return u + make(v);
} else {
return "(" + make(v) + ")" + inverse(u.substring(1, u.length() - 1));
}
}
public String solution(String p) {
return make(p);
}
}
결과
소스코드 깃허브 주소
'코딩테스트 > 알고리즘' 카테고리의 다른 글
[알고리즘]프로그래머스 12941번 - 최솟값 만들기 (0) | 2022.01.15 |
---|---|
[알고리즘]프로그래머스 12953번 - N개의 최소공배수 (0) | 2022.01.15 |
[알고리즘]프로그래머스 12911번 - 다음 큰 숫자 (0) | 2022.01.15 |
[알고리즘]프로그래머스 42885번 - 구명보트 (0) | 2022.01.14 |
[알고리즘]프로그래머스 42746번 - 가장 큰 수 (0) | 2022.01.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 오늘의집
- 코드 스니펫
- Java
- 해쉬
- BFS
- 프로그래머스
- 회고
- 스택
- 연결리스트
- 알고리즘
- JPA
- 문자열
- 카카오
- dfs
- TDD
- sql
- 구현
- 탐욕법
- 정렬
- dp
- 우선순위큐
- k8s
- 쓰레드
- Uber
- kotlin
- 스트림
- 비트연산
- 코딩인터뷰
- dsu
- set
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함