Baekjoon algorithm training

[백준] 4949 (균형잡힌 세상)

interfacer_han 2023. 12. 7. 16:08

#1 알고리즘

#1-1

 

#1-2

 

#2 코드

#2-1 자바

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        while(true) {
            String testCase = sc.nextLine(); // 여기에 trim()을 쓰면, " ."가 "."로 변해버린다.
            
            if(testCase.equals(".")) {
                break; // while을 break
            }
            
            boolean isBalanced = true;
            
            Stack<Character> stack = new Stack<Character>();
            
            for(char c : testCase.toCharArray()) {
                if(c == '(') {
                    stack.push('(');

                } else if(c == ')') {
                    if(stack.isEmpty()) {
                        isBalanced = false;
                        break; // for을 break
                    } else {
                        if(stack.peek() == '(') {
                            stack.pop();
                        } else {
                            isBalanced = false;
                            break; // for을 break
                        }
                    }

                } else if(c == '[') {
                    stack.push('[');

                } else if(c == ']') {
                    if(stack.isEmpty()) {
                        isBalanced = false;
                        break; // for을 break
                    } else {
                        if(stack.peek() == '[') {
                            stack.pop();
                        } else {
                            isBalanced = false;
                            break; // for을 break
                        }
                    }

                } else {
                    continue;
                }
            }
            
            if(isBalanced && stack.isEmpty()) {
                System.out.println("yes");
            } else {
                System.out.println("no");
            }
        }

        sc.close();
    }
}

입력 버퍼로부터 한줄씩 가져올 때, trim()을 쓰는 습관은 반드시 좋은 것이라고 쉽게 생각했다. 하지만, 모든 것엔 장단점이 있는 법이다.

 

#2-2 코틀린

import java.util.Stack

fun main() {
    
    while(true) {
        val testCase = readln()!! // 여기에 trim()을 쓰면, " ."가 "."로 변해버린다.

        if(testCase == ".") {
            break // while을 break
        }

        var isBalanced = true

        val stack = Stack<Char>()

        for(c in testCase) {
            if(c == '(') {
                stack.push('(')

            } else if(c == ')') {
                if(stack.isEmpty()) {
                    isBalanced = false
                    break // for을 break
                } else {
                    if(stack.peek() == '(') {
                        stack.pop()
                    } else {
                        isBalanced = false
                        break // for을 break
                    }
                }

            } else if(c == '[') {
                stack.push('[')

            } else if(c == ']') {
                if(stack.isEmpty()) {
                    isBalanced = false
                    break // for을 break
                } else {
                    if(stack.peek() == '[') {
                        stack.pop()
                    } else {
                        isBalanced = false
                        break // for을 break
                    }
                }

            } else {
                continue
            }
        }

        if(isBalanced and stack.isEmpty()) {
            println("yes")
        } else {
            println("no")
        }
    }
}

입력 버퍼로부터 한줄씩 가져올 때, trim()을 쓰는 습관은 반드시 좋은 것이라고 쉽게 생각했다. 하지만, 모든 것엔 장단점이 있는 법이다.