Notion에는 미리 써놨는데 코육대한다고 포스팅을 까먹었었다.
백준 4949 균형잡힌세상 java https://www.acmicpc.net/problem/4949
스택을 활용해서 선후관계의 순서가 지켜지는지 검사하는 문제,
스택을 활용할때는 push할떄 빼고는 모두 비어있는지 검사해야한다는 경각심을 심어준 문제이다.
저번 포스팅에도 비슷한 생각을 한 것 같은데, 꼭 Stack을 사용하는게 아니라 아래처럼,
int smallParenthesis = 0; // 여는 소괄호 수
int BigParenthesis = 0; // 여는 대괄호 수
그저 여는 괄호의 수를 기록함으로써 풀 수 있다.
static void input() throws Exception {
Stack<Character> parenthesisStack = new Stack<>();
while(true){
String s = scan.nextLine();
parenthesisStack.clear();
if(s.equals("."))
break;
boolean flag = true;
for(int i = 0 ; i < s.length(); i++){
if(s.charAt(i) == '(' || s.charAt(i) == '['){
parenthesisStack.push(s.charAt(i));
}
if(s.charAt(i)== ')'){
if(parenthesisStack.isEmpty() || parenthesisStack.peek() !='('){
flag = false;
break;
}
else
parenthesisStack.pop();
}
if(s.charAt(i)==']'){
if(parenthesisStack.isEmpty() || parenthesisStack.peek() != '['){
flag = false;
break;
}
else
parenthesisStack.pop();
}
}
if(flag == false || parenthesisStack.isEmpty() == false){
sb.append("no").append('\\n');
}
else{
sb.append("yes").append('\\n');
}
}
print();
}
백준 11279 최대 힙 https://www.acmicpc.net/problem/11279
우선순위 큐를 알고 있다면 풀 수 있는 문제
실무에서도 Comparator 대신 람다함수를 잘 활용하는지 의문?
static void input() throws Exception {
// Comparator의 compare 메서드에 매개변수로 입력받은 두 객체끼리 비교하여
// 비교 결과 compare 메서드가 음수를 리턴했다면 그대로,
// 비교 결과 compare 메서드가 양수를 리턴했다면 서로 자리를 바꾼다.
// 기억은 오른쪽이 크도록!
PriorityQueue<Integer> pq = new PriorityQueue<>((i1,i2) -> i2-i1);
int operationCount = scan.nextInt();
for(int z = 0 ; z < operationCount; z++){
int num = scan.nextInt();
if(num==0){
if(pq.isEmpty() == false){
sb.append(pq.poll()).append('\\n');
}
else sb.append(0).append('\\n');
}
else
pq.add(num);
}
print();
}
오늘부터는 알고리즘 추가문제에 도전해보기로 했다.