52일차 - 알고리즘 코드카타(실패)

2024. 10. 1. 09:57·Java & Spring/코딩테스트
목차
  1. - 회고

- 회고

84. 괄호 회전하기 : https://school.programmers.co.kr/learn/courses/30/lessons/76502

 

프로그래머스

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

programmers.co.kr

 

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;

        List<Character> open = Arrays.asList('(', '{', '[');
        List<Character> close = Arrays.asList(')', '}', ']');

        // s의 길이만큼 문자열을 회전
        for (int i = 0; i < s.length(); i++) {
            String rotated = s.substring(i) + s.substring(0, i);
            if (isValid(rotated, open, close)) {
                answer++;
            }
        }

        return answer;
    }

    // 괄호의 짝이 올바른지 체크하는 함수
    private static boolean isValid(String s, List<Character> open, List<Character> close) {
        Stack<Character> stack = new Stack<>();

        for (char c : s.toCharArray()) {
            if (open.contains(c)) {
                stack.push(c);
            } else {
                if (stack.isEmpty()) {
                    return false;
                }
                char lastOpen = stack.pop();
                if (!isMatching(lastOpen, c, open, close)) {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }

    // 여는 괄호와 닫는 괄호가 짝이 맞는지 확인
    private static boolean isMatching(char openChar, char closeChar, List<Character> open, List<Character> close) {
        return open.indexOf(openChar) == close.indexOf(closeChar);
    }
}

- 풀이과정 회고 : 괄호 회전 로직은 구현하였으나 상황에 따른 올바른 회전을 구하는 로직이 실패하는 케이스 발생

  1. substring을 통해 괄호 회전
  2. Stack를 사용하여 짝이 맞는지 체크
  3. 회전된 문자열을 순회하며 여는 괄호이면 stack에 push
  4. 닫는 괄호가나오면 stack를 pop하여 lastopen에 넣고 닫는괄호와 짝이 맞는지 비교
  5. 예를들어 (()(()())())의 경우에서 처음 앞에 (()가 나오게되면 1,2번째 인덱스를 비교한후 pop해서 다시 (..()..(()())()) ..사이를 제외하고 비교를 진행

- 회고 : 이러한 제거하면서 비교하는거에는 stack을 활용해야하는걸 알게됐다.

- 진행

일자 완료 번호
24.07.16 ~ 24.07.31 1~63
24.08.01 ~ 24.08.30 64~80
24.09.06 ~ 24.09.12 81 ~ 83
24.10.01 84
   
   
   
   
   
   
   
 

'Java & Spring > 코딩테스트' 카테고리의 다른 글

[백준] Java - 1929번 : 소수 구하기  (0) 2024.12.10
[백준] Java - 1018번 : 체스판 다시 칠하기  (1) 2024.11.29
43일차 - 알고리즘 코드카타  (0) 2024.09.12
42일차 - 알고리즘 코드카타  (1) 2024.09.11
39일차 - 알고리즘 코드카타  (1) 2024.09.06
  1. - 회고
'Java & Spring/코딩테스트' 카테고리의 다른 글
  • [백준] Java - 1929번 : 소수 구하기
  • [백준] Java - 1018번 : 체스판 다시 칠하기
  • 43일차 - 알고리즘 코드카타
  • 42일차 - 알고리즘 코드카타
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
DJ Hello World백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java arrays.copyofrnage()
    자료구조
    java enhance switch
    java기초
    java 유클리드 호제법
    java
    개발로드맵
    Java this
    java 메서드
    Java 생성자
    java 제어자
    프로그래머스 java 기초 트레이닝
    데이터 타입
    java 에라토스테네스의 체
    java 세수의합
    java two-pointer
    프로그래머스 java 기초트레이닝
    java super
    java 멤버
    데이터 크기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
52일차 - 알고리즘 코드카타(실패)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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