프로그래머스_올바른 괄호 JAVA

2025. 1. 27. 20:38·알고리즘/알고리즘 풀이
반응형

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr



이번 문제는 처음보는 새로운 문제!
그래서 좀 더 시간이 오래 걸렸다.
맨 처음에 문제를 보자마자 음! 정규식을 풀면 쉽겠다 해서 아래 코드를 작성했다.

1차 코드

class Solution {
    boolean solution(String s) {
        String target = "()";
        while(s.contains(target)) {
            if(s.charAt(0) == ')') return false;
            s = s.replaceAll("\\(\\)", "");
        }
        return s.length() == 0;
    }
}

첫 번째 코드는 효율성 테스트에서 모든 케이스에서 실패가 떨어졌다.
뭐가 문제일까 생각해보다가 조금 더 빨리 끝낼 수 있는 경우가 있을까 하다가
‘(’와‘)‘의 개수가 똑같지 않으면 어차피 false이므로 while문을 돌기 전에 개수를 체크해줘봤다.

2차 코드

class Solution {
    boolean solution(String s) {  
        String target = "()";
        
        String left = s.replaceAll("\\)", "");
        String right = s.replaceAll("\\(", "");
        
        if(left.length() != right.length()) return false;
        
        while(s.contains(target)) {
            if(s.charAt(0) == ')') return false;
            s = s.replaceAll("\\(\\)", "");
        }
        
        return s.length() == 0;
    }
}

나름 기능을 더해서 그런지 이번에 효율성 체크는 하나 통과되었다.
그리고 이렇게,,저렇게,,,더 손 봤는데 도저히 답이 내려지지 않았다.
그러다가 생각해 낸 것!! 에라토스테네스의 체를 사용한 프로그래머스 문제에서 int 타입 변수로
속도를 획기적으로 줄였던 것이 생각나서 이를 응용해보기로 했다.

먼저, ‘(’ 방향은 +를 해준다.
‘)’ 방향은 -를 해준다.
그러다가 음수가 나올 시, 이 문자열은 무조건 틀린 문자열이라 false이다.

통과 코드

class Solution {
    boolean solution(String s) {  
        int answer = 0;
        
        for(int i = 0 ; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c == '(') answer++;
            else answer--;
            
            if(answer < 0) return false;
        }
        
        return answer == 0 ? true :false;
    }
}

그리고 for문을다 돌았을 경우 answer가 0이 아니면 이것 또한 틀린 문자열이므로 false를 반환하면 된다.
효율성 테스트까지 해결 완!!

점수까지 4점받음! 굿



즐거운 명절!
오늘도 즐거ㅓㅓ운 코딩……

반응형
'알고리즘/알고리즘 풀이' 카테고리의 다른 글
  • 프로그래머스_프로세스 JAVA
  • 프로그래머스_다리를 지나는 트럭 JAVA
  • 프로그래머스_3진법 뒤집기 JAVA
  • 프로그래머스_짝수와 홀수 JAVA
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SpringBoot를 이용한 RESTful Web Service 개발
    코딩테스트
    react
    스프링부트
    자바스크립트
    토비의스프링부트
    에러해결
    프론트엔드
    egov
    IT
    인프런
    JPA
    방통대
    알고리즘
    MSA
    Java
    넥사크로
    RESTful
    개발자
    QueryDSL
    springboot
    토이프로젝트
    전자정부프레임워크
    운영체제
    oracle
    프로그래머스
    SQL
    백준
    기출문제
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
프로그래머스_올바른 괄호 JAVA
상단으로

티스토리툴바