목록코딩테스트 연습/스택, 큐 (3)
beepbeep
원래 큐는 선입선출법을 따르는 자료구조로, 먼저 넣은 자료가 먼저 처리된다. 그러나 우선순위 큐는 선입선출법을 따르지 않는다. 우선순위 큐의 모든 원소에는 특정한 기준에 따라 우선순위가 부여된다. 우선순위 큐에서는 원소를 넣은 순서와 상관 없이, 이 우선순위에 따라서 원소가 처리된다. 우선순위가 같은 원소가 있을 때에만 원소를 넣은 순서를 확인하고, 먼저 넣은 원소가 처리된다. 즉 우선순위 큐는 자료를 넣은 순서와 상관 없이 우선순위가 높은 자료가 먼저 삭제되는 자료구조이다. 자바에서 우선순위 큐를 선언하려면 PriorityQueue 클래스를 이용해야 한다. 기본적으로 숫자의 크기를 기준으로 우선순위가 부여된다. 숫자의 크기가 작을수록 높은 우선 순위를 가지게 된다. PriorityQueue priori..
문제 살펴보기 주어진 문자열에서 숫자를 찾아 모두 더하되, 숫자가 아닌 "Z"를 만나면 이전에 더했던 값을 지워야 한다. 생각의 흐름 우선 주어진 문자열을 split() 메서드를 이용해 배열 형태로 바꾼다. 반복문을 이용해서 현재 문자열이 "Z"가 아니면 현재 인덱스에 해당하는 값을 누적하고, "Z"면 이전 인덱스에 해당하는 값을 뺐다. 처음 풀 때는 stack을 떠올리지 못해서, stack을 사용해서 다시 풀었다. stack을 사용할 경우, 현재 문자열이 "Z"이면 .pop() 메서드를 이용해 마지막에 쌓은 값을 제거해주면 된다. 풀어보기 Stack을 사용하지 않은 경우 String[] arr = s.split(" "); int answer = 0; for(int i=0; i
문제 들여다보기 괄호로 이루어진 문자열이 주어지며, 문자열 내에서 괄호가 정상적으로 사용되었는지 판단해 true 또는 false를 반환하는 문제이다. 괄호가 정상적으로 사용되었는지를 판단하는 규칙은 다음과 같다! 1. 모든 괄호는 먼저 열린 후에 닫혀야 한다. 2. 괄호를 열고 닫을 때 그 짝이 같아야 한다. 3. 서로 다른 종류의 괄호가 교차되어선 안된다! 예를 들어, 문자열이 " ] ( ) { } "인 경우 1번 규칙에 어긋난다. 만약 주어진 문자열이 " ( } " 인 경우, 2번 규칙에 어긋나며, 주어진 문자열이 " [ { ] } ( ) "인 경우, 3번 규칙에 어긋난다. 규칙에 어긋나면 결과로 false를 반환해야 한다. 생각의 흐름 처음에는 숫자, 문자를 단순 비교할 때처럼 이중반복문으로 풀려고..