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 |
Tags
- 고모네 콩탕
- 설탕 배달
- mvc
- Servlet
- 동적 프로그래밍
- 맛집
- 2638
- 스프링
- 포두부 보쌈
- HTTP API
- Spring
- 프로그래머스
- 맛집 투어
- 문자열 압축
- 알고리즘
- dp
- 2589
- 완도산회
- 호유동
- 2020 KAKAO BLIND
- BFS
- 스프링 MVC
- 서블릿
- 양꼬치
- 2839
- 1로 만들기
- 다이나믹 프로그래밍
- 쓰레드 풀
- 백준
- 투어
Archives
- Today
- Total
프로그래밍 공방
[프로그래머스] 괄호 변환 본문
문제
programmers.co.kr/learn/courses/30/lessons/60058
문제해결방법
균형잡힌 괄호 문자열을 올바른 괄호 문자열로 바꿔주는 과정을 그대로 짜주었다.
1. u, v를 분리하는 과정 -> '('와 ')'의 개수가 동일하게 되는 부분을 u로, 나머지를 v로 분리한다.
2. 올바른 괄호 문자열을 판단하는 방법
괄호 문자열의 앞에서부터 '('의 개수를 세주며 ')'가 나오면 '('의 개수를 차감해준다.
만약 '('가 나왔는데 '('의 개수가 0개이면 false, 문자열을 다 돌았는데 '('의 개수가 1이상이면 false,
이외의 경우는 true이다.
코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package Programmers;
public class Solution_괄호변환 {
public static boolean isRightOrder(String u) {
int l = 0;
for(int i=0; i<u.length(); i++) {
char c = u.charAt(i);
if(c=='(') l++;
else {
if(l==0) return false;
else l--;
}
}
if(l!=0) return false;
return true;
}
public static String[] second(String p) {
String[] uv = {"", ""};
int index = 0, l = 0, r = 0;
for(index=0; index<p.length(); index++)
{
uv[0]+=p.charAt(index);
if(p.charAt(index)=='(') l++;
else r++;
if(l==r) break;
}
index++;
for(;index<p.length(); index++) uv[1] += p.charAt(index);
return uv;
}
public static String first(String p) {
if(p.equals("")) return p;
String[] uv = second(p);
String finalString = "";
if(isRightOrder(uv[0])) {
finalString = uv[0] + first(uv[1]);
} else {
finalString = "(" + first(uv[1]) + ")";
for(int i=1; i<uv[0].length()-1; i++) {
char ch = uv[0].charAt(i)=='('?')':'(';
finalString += ch;
}
}
return finalString;
}
public static String solution(String p) {
String answer = "";
answer = first(p);
return answer;
}
public static void main(String[] args) {
String p = "()))((()";
System.out.println(solution(p));
}
}
|
cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[프로그래머스] 가사 검색 (0) | 2021.01.21 |
---|---|
[프로그래머스] 베스트앨범 (0) | 2021.01.20 |
[백준] 1194번 : 달이 차오른다, 가자. (0) | 2021.01.20 |
[프로그래머스] 블록 이동하기 (0) | 2021.01.14 |
[프로그래머스] 기둥과 보 설치 (0) | 2021.01.14 |