[백준][JAVA] 1662번 - 압축

2024. 5. 10. 10:31·백준/Java
728x90
반응형

https://www.acmicpc.net/problem/1662


풀이

  1. '(' 기호가 나올 때마다 대응하는 ')' 기호가 나올 때까지 함수를 호출하고 사이의 길이를 구한다
    () 중간에 다른 괄호가 있는 경우 안쪽 괄호의 길이를 먼저 계산하여 리턴하면 바깥쪽 괄호의 Q 길이를 구할 수 있다

 

압축 부분 K(Q)의 Q의 길이를 구하는 것이 관건인 문제인 것 같다. 문제를 처음 봤을 때 stack를 생각했고 (, )를 사이 문자의 개수를 세어 Q의 길이를 계산하는 방식의 풀이 방법을 생각했으나 K(K(Q))와 같은 형태에서 바깥쪽 K(Q)의 Q의 길이를 구하는 데에 어려움이 있었다. 조금 더 생각해 보니 재귀함수를 호출해서 Q의 길이를 구하는 방법으로 문제를 해결할 수 있었다.


답

import java.io.*;
import java.util.StringTokenizer;
import java.lang.*;

class Main {
	
	public static int unzip(String S, int i) {
		int len = 0;
		int multi = S.charAt(i - 2) - '0';
		int count;
		while (i < S.length()) {
			if (S.charAt(i) == '(') {
				i++;
				len += unzip(S, i) - 1;
				count = 1;
				while (count > 0) {
					if (S.charAt(i) == '(')
						count++;
					else if (S.charAt(i) == ')')
						count--;
					i++;
				}
			}
			else if (S.charAt(i) == ')') {
				i++;
				break;
			}
			else {
				len++;
				i++;
			}
		}
		return len * multi;
	}
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String S = br.readLine();
		int i = 0;
		int totalLen = 0;
		int count;
		while (i < S.length()) {
			if (S.charAt(i) == '(') {
				i++;
				totalLen += unzip(S, i) - 1;
				count = 1;
				while (count > 0) {
					if (S.charAt(i) == '(')
						count++;
					else if (S.charAt(i) == ')')
						count--;
					i++;
				}
			}
			else {
				totalLen++;
				i++;
			}
		}
		System.out.print(totalLen);
	}
}
728x90
반응형

'백준 > Java' 카테고리의 다른 글

[백준][Java] 15650번 - N과 M (2)  (0) 2023.07.13
'백준/Java' 카테고리의 다른 글
  • [백준][Java] 15650번 - N과 M (2)
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
      • 공군 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    컴퓨터구조
    티스토리챌린지
    메모리 계층 구조
    데이터패스
    C++
    단일 사이클
    추가 문제
    자료구조
    명령어
    반복자
    사설 문제
    컴공 포트폴리오
    자바
    백준
    오블완
    42서울
    상속
    코틀린
    리눅스
    컴퓨터 구조 및 설계
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[백준][JAVA] 1662번 - 압축
상단으로

티스토리툴바