hwooo
프로그래머스 (C/C++, Java) 60058 : 괄호 변환 본문
https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr



풀이
문제에 주어진 방법대로 풀면 답을 구할 수 있다.
C/C++ 코드
#include <string>
#include <vector>
using namespace std;
bool checkCorrect(string u) {
int openCnt = 0;
for (int i = 0; i < u.length(); i++) {
if (u[i] == '(') openCnt++;
else openCnt--;
if (openCnt < 0) return false;
}
if (openCnt != 0) return false;
return true;
}
int getBalanceIdx(string u) {
int open = 0, close = 0;
for (int i = 0; i < u.length(); i++) {
if (u[i] == '(') open++;
else close++;
if (open == close) return i + 1;
}
return u.length();
}
string getBalance(string w) {
if (w.empty()) return "";
int idx = getBalanceIdx(w);
string u = w.substr(0, idx);
string v = w.substr(idx);
if (checkCorrect(u))
return u + getBalance(v);
else {
string s = "(" + getBalance(v) + ")";
for (int i = 1; i < u.length() - 1; i++) {
if (u[i] == '(') s.append(")");
else s.append("(");
}
return s;
}
}
string solution(string p) {
return getBalance(p);
}
Java 코드
import java.util.*;
class Solution {
public String solution(String p) {
return getBalance(p);
}
private String getBalance(String w) {
if (w.isEmpty()) return "";
int idx = getBalanceIdx(w);
String u = w.substring(0, idx);
String v = w.substring(idx);
if (checkCorrect(u))
return u + getBalance(v);
else {
StringBuilder sb = new StringBuilder();
sb.append("(").append(getBalance(v)).append(")");
for (int i = 1; i < u.length() - 1; i++) {
if (u.charAt(i) == '(') sb.append(")");
else sb.append("(");
}
return sb.toString();
}
}
private int getBalanceIdx(String u) {
int open = 0, close = 0;
for (int i = 0; i < u.length(); i++) {
if (u.charAt(i) == '(') open++;
else close++;
if (open == close) return i + 1;
}
return u.length();
}
private boolean checkCorrect(String u) {
int openCnt = 0;
for (int i = 0; i < u.length(); i++) {
if (u.charAt(i) == '(') openCnt++;
else openCnt--;
if (openCnt < 0) return false;
}
if (openCnt != 0) return false;
return true;
}
}
'Study > Algorithm' 카테고리의 다른 글
BOJ (C/C++, Java) 10159번: 저울 (0) | 2025.01.14 |
---|---|
프로그래머스 (C/C++, Java) 77486 : 다단계 칫솔 판매 (0) | 2025.01.13 |
LeetCode (C/C++, Java) 1219. Path with Maximum Gold (0) | 2025.01.10 |
BOJ (Java) 11779번: 최소비용 구하기 2 (0) | 2025.01.07 |
프로그래머스 (C/C++, Java) 72413 : 합승 택시 요금 (0) | 2025.01.04 |