🎁 문제 링크
https://www.acmicpc.net/problem/9012
3052번: 나머지
각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.
www.acmicpc.net
🎁 문제 설명
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
🎁 입출력 예시
🎁 문제 풀이
1) 괄호 수식 : [ '( ' ] + [ ')' ]
2) 여는 괄호가 있을 때는 스택을 쌓고(push), 닫는 괄호가 있으면 여는 괄호를 하나 지워준다.(pop)
3) 수식을 진행하는 도중에 스택이 비어있을 때, 닫는 괄호[ ')' ]가 나온다면 pop할 요소가 없다.(해당 조건은 예외처리)
4. [문제 이해를 위한 이미지 포함 설명 참조 링크]
🎁 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class BOJ_9012 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int i = 0; i < T; i++) {
String S = br.readLine();
//문자열의 각 자리의 값을 확인할때는 char형태 진행
Stack<Character> stack = new Stack<Character>();
for(int j = 0; j < S.length(); j++) {
if(S.charAt(j) == '(') {
stack.push(S.charAt(j));
}else {
//비어있는지를 먼저 본다.
if(stack.isEmpty()) {
stack.push(S.charAt(j));
break;
}else {
stack.pop();
}
}
}
if(stack.isEmpty()) System.out.println("YES");
else System.out.println("NO");
}
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
백준 10807번: 개수 세기 [Java] (0) | 2023.08.14 |
---|---|
[Java][백준 1330번] : 두 수 비교하기 (0) | 2023.08.14 |
[Java][백준 2884번] : 알람 시계 (0) | 2023.08.14 |
댓글