본문 바로가기

📊알고리즘/BOJ101

BOJ 2504] 괄호의 값 [ 생각해야 할 점 ] - 괄호의 짝이 맞을 때, 그 괄호는 어디에 있는 괄호인지 구분해야함 (+와 *의 차이를 위해) - 연산을 하기 위해 따로 피연산자와 수를 넣는 스택이 필요한지 고민해야함 - 입력을 모두 받고 할지, 입력받으면서 할지 고민해야함 [ 첫번째 시도 ] - 연산을 모두 받고 계산하기로 함 - 연산을 하기 위한 피연산자와 연산자를 넣을 스택을 구비함 - 다음 조건을 생각해냄 (*가 오는 경우) - (나 [가 들어오면 (+가 오는 경우) - 쌍이 맞아 pop한 후, 여는 괄호가 들어올때 (연산하는 경우) - *이 스택에 들어올때 - 스택이 비었을 때 코드가 너무 길어지고, 복잡해서 그냥 int 변수에 연산을 하기로 결정 더보기 #include #include #include #include.. 2022. 12. 19.
BOJ 17299] 오등큰수 [ 접근법 ] - 오큰수 문제와의 차이점이라면 등장 횟수를 추가로 저장해야한다는 것이다. - 등장 횟수를 따로 저장하는 것 이외에 그대로 진행하면 된다. [ 주의 사항 ] - 등장횟수와 값을 저장하는 배열 두가지를 혼동하지 말자. - stack과 결과값에는 순서를 저장해두자! [ 코드 ] 더보기 #include #include #include #include #include using namespace std; stack s; int arr[1000001]; //num[i]의 등장횟수 int num[1000001]; //i번째 원소의 값 int res[1000001]; //v에는 오등큰수의 순서가 정리 int main() { ios_base::sync_with_stdio(false); cin.tie(NU.. 2022. 12. 15.
BOJ 17298] 오큰수 [ 접근법 ] - 오른쪽 수열에서 자신보다 큰 수중 가장 작은 값을 구하는 것이기 때문에 stack을 이용하자. - 하나하나 비교하는 o(n*n)는 수가 100000에 달하기 때문에 다른 방법을 모색해야 된다. - 왼쪽에 있는 수열의 오큰수는 무조건 오른쪽의 있는 수열보다 작거나 같다. - 그렇기 때문에 만약 다음 수열이 자신의 오큰수가 아니라면 stack에 저장해두고 다음 수열의 오큰수가 등장하면, 그때 stack을 pop하면서 해당 오큰수가 stack에 저장된 오큰수가 맞나 확인을 한다. - 만약 오큰수가 아니라면 -1을 저장한다. [ 주의사항 ] - 결과 저장배열에 수열 순서대로 저장해야 순서가 뒤죽박죽 되지 않는다. - 시간이 1초라고 해서 이중반복문이 등장하면 안되는 것이 아니다! - 마찬가지로.. 2022. 12. 15.
BOJ 1874] 스택 수열 [ 문제 이해 ] 입력 값 예) 3 5 1 2 4 - 1부터 n까지의 수를 순서대로 스택에 넣는다. (+출력) 스택 : 1 2 3 - 위를 하다 입력된 값과 같아지면 그 수를 스택에서 제거한다 (-출력) 스택 : 1 2 (3제거) 스택 : 1 2 4 (5제거) 이런 식으로... - 위 과정을 몇번해서 스택이 비워지고, 해당 수열이 완성되는 지 총 횟수를 출력한다 - 만약 위 과정을 진행하다 수열이 만들어지지 않으면 NO를 출력한다. [ 접근법 ] 1. 스택에 1부터 1씩 증가하면서 스택에 넣는다. 2. 입력받은 값이 스택의 top 과 같아지면 스택을 pop()한다. 3. 1,2 과정을 반복하다 스택이 비워지면 종료 4. 만약 위 과정 중 스택이 입력값이 스택의 topp()보다 크면 "NO" 를 출력하고 .. 2022. 12. 13.
BOJ 6198] 옥상 정원 꾸미기 문제 바로가기 접근법 하나의 빌딩은 오른쪽 방향에 있는 빌딩만 볼 수 있다. 한 방향으로만 진행되므로 스택을 이용하면 좋을 것 같다고 생각함. 1. 빌딩의 높이를 저장하는 스택(빌딩[])과, 순서를 저장하는 스택(시퀀스[]) 두가지를 이용한다. 2. 첫번째 입력값을 두가지 스택에 일단 푸쉬한다. 3. 두번째 빌딩의 높이가 주어지면, 빌딩 스택의 top과 비교한다. 3-1. 만약 top 입력값이면, 빌딩 스택과 시퀀스 스택 모두 저장한다. 4. 모든 데이터가 스택에 저장되서 끝나게 되면, 남은 스택의 개수 만큼 result를 증가시킨다. [코드 보기] 더보기 #include #include #include using namespace std; stack s; stack sequence; int main().. 2022. 12. 13.