문제. 괄호 쌍이 올바른지 구하시오. 올바르면 "YES", 아니면 "NO"를 출력하시오
입력예시
(()()))()()())))((()
답 : NO
나의 답변
public class Main {
public String solution(String str) {
String answer = "YES";
Stack<Character> stack = new Stack<>();
for( char x : str.toCharArray()) {
if(!stack.isEmpty()) {
if(x=='(') stack.push(x);
else stack.pop();
} else {
if(x=='(') stack.push(x);
else answer="NO";
}
}
if(!stack.isEmpty()) answer="NO";
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str=sc.next();
System.out.print(T.solution(str));
}
}
또 다른 방법
import java.util.Scanner;
public class Main {
public String solution(String str) {
int count = 0;
for (char x : str.toCharArray()) {
if (x == '(') {
count++;
} else if (x == ')') {
count--;
}
if (count < 0) {
return "NO";
}
}
if (count != 0) {
return "NO";
}
return "YES";
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.print(T.solution(str));
}
}
- 나의 답변은 Stack을 사용해서 'LIFO'을 적용시켜 '(' 일 시 push하고 ')'일 시 pop하여 과정 중에 Stack이 비거나 과정이 다 끝났는데도 Stack이 비지않았을 경우를 구분해 "NO"를 return하게 함
- 또 다른 방법은 Stack을 굳이 쓰지 않는 방법이다. Stack을 사용하면 데이터를 스택에 계속 쌓아야 하므로 입력값이 클 시 메모리 사용량이 늘어날 수 있고, 코드도 더 길어질 수 있다. int 변수를 사용하면 괄호 개수를 더 간결하게 추적가능하다.
'코딩테스트 및 알고리즘' 카테고리의 다른 글
Stack (0) | 2024.01.14 |
---|---|
소괄호 사이에 문자 제거 후 남은 문자 구하기 (0) | 2024.01.11 |
트리 (0) | 2024.01.08 |
N장의 카드에서 3장 뽑고 그 합이 k번째로 큰 수 구하기 (0) | 2024.01.07 |
T문자열과 아나그램이 되는 S문자열의 부분문자열 개수 구하기 (1) | 2024.01.06 |