import java.io.*;
import java.util.HashMap;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//가지고 있는 숫자카드를 정리할 해시맵
HashMap<String, Integer> map = new HashMap<>();
//해시맵에 넣는 과정
//getOrDefault는 해시맵에 키에 대한 값이 있으면 그것을 리턴하고, 아니면 default값으로 설정해놓은 값을 리턴함
int n = Integer.parseInt(br.readLine());
String[] nums = br.readLine().split(" ");
for (int i = 0; i < n; i++) {
map.put(nums[i], map.getOrDefault(nums[i], 0)+1);
}
int t = Integer.parseInt(br.readLine());
String[] test = br.readLine().split(" ");
for (int i = 0; i < t; i++) {
bw.write(map.getOrDefault(test[i], 0) + " ");
}
bw.flush();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//괄호 줄 입력 받아서 char 배열로 변환
//String 배열을 쓰지 않은 이유는 '('냐 ')'냐 비교할 때
char[] pipe = br.readLine().toCharArray();
//괄호 문제여서 그냥 스택을 썼지만 그냥 int 써도 괜찮음
Stack<Character> s = new Stack<>();
//result는 쇠파이프 조각 개수
int result = 0;
for (int i = 0; i < pipe.length-1; i++) {
만약 pipe[i]가 열린 괄호이고,
if (pipe[i] == '(') {
//만약 pipe[i+1]이 닫힌 괄호면
if (pipe[i+1] == ')') {
자르는 타이밍이기 때문에 스택의 개수 더해주고 i+1은 체크할 필요 없어서 i++
result += s.size();
i++;
} else { //닫힌 괄호가 아니면 파이프의 시작 부분이기 때문에 스택에 추가
s.add('(');
}
} else { //닫힌 괄호면 스택에서 하나 빼주고 개수 하나 더해줘야 함
s.pop();
result++;
}
}
//마지막 문자열은 체크하지 않기 때문에 1 더해줘야함
System.out.println(result+1);
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//입력 받을 숫자 개수
int n = Integer.parseInt(br.readLine());
//출력할 숫자 합계
int result = 0;
//스택으로 가장 최근 입력 받은 숫자 파악하기
Stack<Integer> s = new Stack<>();
for (int i = 0; i < n; i++) {
int num = Integer.parseInt(br.readLine());
//만약 num이 0이면 스택 최상위 숫자 제거
if (num == 0) {
s.pop();
} else { //0이 아니면 스택에 추가
s.add(num);
}
}
//스택의 숫자를 하나씩 꺼내면서 result에 더해주기
while (!s.isEmpty()) {
result += s.pop();
}
System.out.println(result);
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//테스트 케이스 개수
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
//한 줄씩 입력 받아와서 char 배열로 변환
char[] word = br.readLine().toCharArray();
//열린 괄호를 담기 위한 스택
Stack<Character> s = new Stack<>();
//for문 중간에 탈출을 했는지 체크할 boolean
boolean value = true;
for (int j = 0; j < word.length; j++) {
if (word[j] == '(') { //만약 열린 괄호라면 스택에 추가
s.add(word[j]);
} else { //닫힌 괄호라면
if (!s.isEmpty()) { //스택이 비어있지 않으면 스택에서 하나 꺼내기
s.pop();
} else { //비어있으면 올바른 문자열이 아니기 때문에 value 값 변경 후 탈출
value = false;
break;
}
}
}
//만약 s가 비어있고, value도 true면 올바른 문자열이라서 YES, 그렇지 않으면 NO 출력
bw.write((s.isEmpty() && value ? "YES" : "NO") + "\n");
}
bw.flush();
bw.close();
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//소수인지를 담을 해시맵
HashMap<Integer, Boolean> decimal = new HashMap<>();
int num = 0;
while ((num = Integer.parseInt(br.readLine())) != 0) {
//소수 조합이 여러 개일 경우 차이가 큰 것을 리턴하는 것이기 때문에 작은 숫자부터 시작
for (int i = 2; i <= num; i++) {
//만약 i가 해시맵에 없으면 소수인지 파악 후 넣기
if (!decimal.containsKey(i)) decimal.put(i, check(i));
//i가 소수가 아니면 넘어가기
if (!decimal.get(i)) continue;
//n은 숫자에서 i를 뺀 숫자
int n = num - i;
//n 역시 해시맵에 없으면 소수인지 파악 후 넣기
if (!decimal.containsKey(n)) decimal.put(n, check(n));
//만약 n도 소수라면 bw에 입력 후 for문 종료
if (decimal.get(n)) {
bw.write(num + " = " + i + " + " + n + "\n");
break;
}
}
}
bw.flush();
bw.close();
}
//소수 파악용 함수
public static boolean check(int num) {
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) return false;
}
return true;
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = "";
//br로 한 줄씩 입력 받는 것을 s에 넣고, 문장이 담긴 s가 .이 아닐 때까지 반복
while (!(s = br.readLine()).equals(".")) {
//s를 char 배열로 변환 => String 배열로 변환해도 되지만 시간을 단축시키려면 char을 활용하는 편이 좋음
char[] arr = s.toCharArray();
//여는 괄호를 담을 스택. 닫는 괄호가 나올 때 제일 위에 있는 괄호를 꺼내는 용도
Stack<Character> stack = new Stack<>();
//균형이 맞는지 파악용
boolean check = true;
for (int i = 0; i < arr.length; i++) {
//만약 여는 괄호면 그냥 stack에 담기
if (arr[i] == '(' || arr[i] == '[') stack.add(arr[i]);
//만약 닫는 괄호라면
if (arr[i] == ')' || arr[i] == ']') {
//스택이 비어있지 않고, 닫는 소괄호면 스택 최상위가 여는 소괄호이거나 닫는 대괄호면 스택 최상위가 여는 대괄호라면
if (!stack.isEmpty() && ((arr[i] == ')' && stack.peek() =='(') || (arr[i] == ']' && stack.peek() =='['))) {
//스택 최상위 값 제거
stack.pop();
} else {
//그렇지 않으면 균형이 맞지 않으므로 check에는 false를 담고 for문 끝내기
check = false;
break;
}
}
}
//마지막 확인으로 스택이 비어있지 않으면 균형이 맞지 않기 때문에 확인
if (!stack.isEmpty()) check = false;
//check가 true면 yes를, false면 no를 출력
bw.write((check ? "yes" : "no") + "\n");
}
bw.flush();
bw.close();
}
}