diff --git a/src/main/java/Solution.java b/src/main/java/Solution.java index 5615be4..daada57 100644 --- a/src/main/java/Solution.java +++ b/src/main/java/Solution.java @@ -1,20 +1,35 @@ import java.util.*; -import java.io.*; -import java.math.*; +import java.util.function.BiPredicate; -/** - * Template code to help you parse the standard input - * according to the problem statement. - **/ class Solution { - - public static void main( String[] args ) { - Scanner in = new Scanner( System.in ); - // read values with in.next...() methods - - // code your solution here - - // Write result with System.out.println() - System.out.println( "value" ); - } + + // best readable version, also without dark ASCII code tricks + private static final BiPredicate BRACKETS_MATCH = ( c1, c2 ) -> ( c1 != null && c2 != null ) + && (( c1 == '(' && c2 == ')' ) || ( c1 == '[' && c2 == ']' ) || ( c1 == '{' && c2 == '}' )); + + // code your solution here + private static boolean checkNextChar( Deque stack, Iterator iter ) { + if ( ! iter.hasNext() ) return stack.isEmpty(); + + int c = iter.next(); + if ( BRACKETS_MATCH.test( stack.peek(), c )) { + stack.pop(); + } + else { + stack.push( c ); + } + + return checkNextChar( stack, iter ); + } + + public static void main( String[] args ) { + // hint: read values via Scanner methods + var inputLine = new Scanner( System.in ).nextLine(); + + var stack = new ArrayDeque( inputLine.length() ); + var iter = inputLine.chars().iterator(); + + // Write result with System.out.println() + System.out.println( checkNextChar( stack, iter ) ); + } }