오늘의 1일1코테는,
스터디에서 다른 분이 풀어오신 문제를 다시 풀어보았다.
문제 자체는 그렇게 어렵진 않은 것 같다.
입력값에서 반쪽짜리 괄호들을 하나의 괄호로 만들기 위해 필요한 괄호의 수(cnt)를 구하는 문제였다.
public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Stack stack = new Stack(); int cnt = 0; String input = br.readLine(); for(int i=0; i<input.length(); i++){ if(input.charAt(i) == ')' && stack.isEmpty()){ cnt++; continue; } if(input.charAt(i) == '('){ stack.add(input.charAt(i)); }else if(input.charAt(i) == ')' && !stack.isEmpty()){ stack.pop(); } } if(!stack.isEmpty()){ cnt += stack.size(); } System.out.println(cnt); }
입력받은 문자열이 처음부터 닫힌 괄호로 시작하는 경우는 무조건 열린 괄호를 추가해야 하기때문에 cnt를 증가시킨다.
열린 괄호로 시작하는 경우에는 일단 스택에 저장해두고,
이후에 닫힌 괄호가 나올 때 스택에서 삭제를 하기 위해 닫힌 괄호일때 AND로 스택이 비어있지 않은 경우까지 추가하여 구현하였다.
이 부분을 구현하면서 처음부터 닫힌 괄호로 시작하는 경우에도 AND로 스택이 비어있는 경우를 추가해주었다.
입력 문자열을 다 확인했으면 그 때 스택에 남아있는 값들은 닫힌 괄호를 못 만난 반쪽짜리 열린 괄호이므로 cnt에 추가해준다.