코딩테스트/알고리즘 문제풀이

[99클럽 코테 스터디 28일차 TIL] 괄호 회전하기 - Java [자바][프로그래머스]

2024. 8. 18. 12:45
목차
  1. 📜 문제 내용
  2. 🤔 과정
  3. ✨ 최초 제출 답안 - 🙆‍♂️ 통과
  4. 🔗 문제 링크
728x90
반응형

 

 

📜 문제 내용

 

🤔 과정

  • stack.clear()를 통해 최대한 하나의 stack을 활용하고, 조건문의 수를 최소화하는 방법을 고민했다. 
  • 괄호를 회전하는 방법에 대한 고민을 하다가 charAt을 사용한 동적 회전에 대해 알게 되어 활용했다. 

 

✨ 최초 제출 답안 - 🙆‍♂️ 통과

import java.util.Stack;

public class Solution {
    static public int solution(String s) {
        int sLen = s.length();
        int cnt = 0;

        // 여는 괄호를 넣고, 재사용할 stack
        Stack<Character> stack = new Stack<>();

        for (int i = 0; i < sLen; i++) {
            boolean isValid = true;
            stack.clear();  // 스택 초기화

            for (int j = 0; j < sLen; j++) {
                char c = s.charAt((i + j) % sLen);  // 동적 회전
                
                // 여는 괄호 삽입
                if (c == '(' || c == '{' || c == '[') {
                    stack.push(c);
                } else {  // else 내부는 닫는 괄호일 때의 처리 
                    
                    // stack이 비어있다면, 여는 괄호가 하나도 없고
                    // 닫는 괄호가 나온 상태이므로 올바르지 않음 
                    if (stack.isEmpty()) {
                        isValid = false;
                        break; 
                    }
                    
                    // (). {}. [] 일 경우는 알아서 pop이 되고, 
                    // 아닐 경우에만 조건문 처리
                    // 아닐 경우에, 올바르지 않은 문자열이므로 break
                    char top = stack.pop();
                    if ((c == ')' && top != '(') ||
                        (c == '}' && top != '{') ||
                        (c == ']' && top != '[')) {
                        isValid = false;
                        break;
                    }
                }
            }
            
            // 올바른 괄호 문자열이고, 남는 여는 괄호가 없으면 
            if (isValid && stack.isEmpty()) {
                cnt++;
            }
        }

        return cnt;
    }
}

 

🔗 문제 링크

  • 프로그래머스 - 괄호 회전하기 (링크) 
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

728x90
반응형
저작자표시 (새창열림)
  1. 📜 문제 내용
  2. 🤔 과정
  3. ✨ 최초 제출 답안 - 🙆‍♂️ 통과
  4. 🔗 문제 링크
'코딩테스트/알고리즘 문제풀이' 카테고리의 다른 글
  • [99클럽 코테 스터디 30일차 TIL] Find Right Interval - Java [자바][LeetCode]
  • [99클럽 코테 스터디 29일차 TIL] Longest Increasing Subsequence - Java [자바][LeetCode]
  • [99클럽 코테 스터디 27일차 TIL] 할인 행사 - Java [자바][프로그래머스]
  • [99클럽 코테 스터디 26일차 TIL] 달리기 경주 - Java [자바][프로그래머스]
bonkri
bonkri
Swimming through the sea of ​​information
bonkri
Bon_chive
bonkri
전체
오늘
어제
Bonkri's GitHub
  • 분류 전체보기
    • 일상 기록
    • SSAFY
      • TENsion UP 10기!
      • SSAFYcial
    • 프로그래밍 언어
      • Java
    • IT 자격증
    • 코딩테스트
      • TIL
      • 유형별 개념
      • 알고리즘 문제풀이
반응형
250x250

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
bonkri
[99클럽 코테 스터디 28일차 TIL] 괄호 회전하기 - Java [자바][프로그래머스]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.