이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 (김태원)의 문제입니다.
문제 설명
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class sec05_01 {
public static String solution(String str) {
int left = 0;
for(int i = 0; i < str.length(); ++i)
{
if(str.charAt(i) == '(') ++left;
else
{
--left;
if(left < 0) return "NO";
}
}
return (left == 0) ? "YES" : "NO";
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(solution(br.readLine()));
}
}
설명
주어진 문자열 str의 각 문자를 순회하면서 열린 괄호 ’(’의 개수를 카운트하고, 닫힌 괄호 ’)’를 만나면 카운트를 감소시킨다. 이때, 닫힌 괄호가 열린 괄호보다 먼저 나오는 경우(즉, left < 0이 되는 경우) “NO”를 반환한다. 최종적으로, 열린 괄호와 닫힌 괄호의 개수가 일치하는지 (left == 0) 확인하여 일치하면 “YES”를 반환하고, 그렇지 않으면 “NO”를 반환한다.
- 변수 left: 열린 괄호 ’(’의 수를 카운트하는 변수이다. 닫힌 괄호 ’)’를 만나면 이 값을 감소시킨다.
- 문자 순회: 문자열의 각 문자를 순회하며, 열린 괄호를 만나면 left를 증가시키고, 닫힌 괄호를 만나면 left를 감소시킨다.
- left < 0 체크: 닫힌 괄호가 열린 괄호보다 많아지면, “NO”를 반환한다. 이는 올바른 괄호 문자열이 아니기 때문이다.
- 최종 결과: 모든 문자열을 순회한 후, left가 0이면 모든 괄호가 짝을 이루는 것이므로 “YES”를 반환하고, 그렇지 않으면 “NO”를 반환한다.
'자료구조 & 알고리즘 > Inflearn' 카테고리의 다른 글
[인프런 알고리즘] Chapter 5, 3번 문제(크레인 인형뽑기(카카오)) (0) | 2024.08.09 |
---|---|
[인프런 알고리즘] Chapter 5, 2번 문제(괄호문자제거) (1) | 2024.08.07 |
[인프런 알고리즘] Chapter 4, 5번 문제(K번째 큰 수) (0) | 2024.08.05 |
[인프런 알고리즘] Chpater 4, 4번 문제(모든 아나그램 찾기) (0) | 2024.08.04 |
[인프런 알고리즘] Chapter 4, 3번 문제(매출액의 종류) (0) | 2024.08.03 |