본문 바로가기
PS/BOJ

백준 5966 자바 - Cow Cotillion (BOJ 5966 JAVA)

by Nahwasa 2021. 11. 23.

문제 : https://www.acmicpc.net/problem/5966

 

  '>'와 '<'의 짝이 맞으면 legal, 그렇지 않다면 illegal을 출력하면 되는 문제이다. 일반적으로 괄호쌍 맞추기와 같이 스택에 '>'를 넣고, '<'를 만나면 빼는 식으로 많이 생각해서 풀 것 같다.

 

  더 간단하게 풀자면, 입력으로 들어온 문자열의 각 character마다 '>'와 '<'를 각각 카운팅하면서 중간에 한번이라도 '<'이 더 개수가 많아지면 illegal. 다 셌을 때 카운팅 수가 다르면 illegal. 이외의 경우 legal을 출력하면 된다.

 

 

  ">><<><"을 보자.

위와 같이 문자열의 idx 순서대로 진행하며 '>'와 '<'를 카운팅한다. 이 경우 '<'이 한번도 '>'보다 많았던 적이 없고, 마지막까지 갔을 때 두 값이 동일하므로 legal이다.

 

 

  "><<>"을 보자.

이 경우 idx=2 일 때 '<'가 더 많아지므로 illegal이다.

 

 

코드 : https://github.com/NaHwaSa/BOJ_BaekjunOnlineJudge/blob/master/05900/BOJ_5966.java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private boolean isLegal(String str) {
        int cnt1 = 0;
        int cnt2 = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '>') cnt1++;
            else cnt2++;
            if (cnt2>cnt1) return false;
        }
        if (cnt1!=cnt2) return false;
        return true;
    }

    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        while (n-->0) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            st.nextToken();
            sb.append(isLegal(st.nextToken()) ? "legal" : "illegal").append('\n');
        }
        System.out.print(sb);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글