https://school.programmers.co.kr/learn/courses/30/lessons/60058?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이방법
문제를 이해해보려고 했다가 망했던문ㅈ ㅔ... 진짜 문제에서 하란대로 해야지 풀린다
1. 문자열을 두개로 나눈다.
-> 나누는 기준 : '(' 이면 -1, ')' 이면 +1을 해주고 0이 되는 지점을 기준으로 앞 문자열을 u, 뒷 문자열을 v
2. u문자열의 맨 앞문자가 '(' 이면 올바른 괄호 문자열이다.
3. 올바른 괄호 문자열인 경우 u를 answer에 추가, v에 대해서 다시 divide함수 실행
4. 올바른 괄호 문자열이 아닌 경우 문제에서 하란대로 해주기 -> 이거 내맘대로 했다가 어지러웠다
소스코드
class Solution {
static String answer = "";
public String solution(String p) {
divide(p);
return answer;
}
static void divide(String str){
if(str.equals("")) { //빈 문자열이면 리턴
return;
}
boolean leftC = false; //왼쪽 문자열이 올바른 괄호 문자열인지
int point = 0;
int same = 0; //왼괄호,오른괄호 갯수 -: 왼괄호 많음 , 0:같음, +: 오른괄호 많음
if(str.charAt(0)=='(') { //왼괄호 시작일 때
leftC = true;
}
for(int i = 0; i < str.length(); i ++) {
if(str.charAt(i) == '(') { //왼괄호인 경우
same-=1;
}
if(str.charAt(i) == ')') { //오른괄호인 경우
same+=1;
}
if(same == 0 ) { //왼괄호와 오른괄호가 같아졌다면
point = i;
break;
}
}
if(leftC) {
answer += str.substring(0,point+1);
divide(str.substring(point+1,str.length()));
}
if(!leftC) {
answer += '(';
divide(str.substring(point+1,str.length()));
answer += ')';
// 시작, 끝 빼고 괄호 반대방향으로 뒤집기
for(int j = 1; j < point; j++) {
if(str.charAt(j) == '(') {
answer += ')';
}
if(str.charAt(j) == ')') {
answer += '(';
}
}
}
}
}
결과
'Algorithm > java' 카테고리의 다른 글
프로그래머스: [1차] 뉴스 클러스터링 (0) | 2023.08.22 |
---|---|
프로그래머스: [1차] 캐시 (1) | 2023.08.22 |
백준 14722 JAVA : 우유 도시 (0) | 2023.07.12 |
백준 20440 JAVA : 🎵니가 싫어 싫어 너무 싫어 싫어 오지 마 내게 찝쩍대지마🎵 - 1 (0) | 2023.07.11 |
백준 21943 JAVA : 연산최대로 (0) | 2023.07.11 |