목록스택 (14)
어흥
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12909 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 주의할 점 - 스택을 이용해서 해결한다 - "((("와 같은 문자열을 처리할 수 있는 방법을 찾는다 2. 구현 - 스택을 사용하며, 현재 문자가 '('가라면 스택에 추가한다 - 현재 문자가 ')'라면 2가지 경우로 나눈다 - 첫째, 스택이 비어있다면 false를 반환한다 - 둘째, 스택이 비어있지 않다면 스택의 원소 1개를 pop 한다 - 문자열 전체를 조회했다면 이제 스택이 비..
문제 링크: https://www.acmicpc.net/problem/17299 17299번: 오등큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 1. 주의할 점 - StringBuilder를 사용해서 출력하자(하지 않으면 TLE) - O(N*N)의 시간복잡도를 가지지 않도록 한다 2. 구현 - 각 숫자를 Arr[]에 담으면서, 해당 숫자가 몇 번 등장했는지 Cnt[] 배열에 저장한다 - 오른쪽에 위치하면서 가장 가까운 숫자를 담아야 하므로 Arr[]의 뒤부터 탐색한다 - Stack에는 우 → 좌 로 이동하면서 현재 숫자가 등장한 횟수가 S..
문제 링크: https://www.acmicpc.net/problem/15926 15926번: 현욱은 괄호왕이야!! 첫 번째 입출력에서, 맨 처음 위치부터 4개를 잘라낸 (())가 가장 긴 올바른 괄호 문자열이다. 두 번째 입출력에서, 6번째 위치부터 8개를 잘라낸 ()((()))가 가장 긴 올바른 괄호 문자열이다. www.acmicpc.net 1. 주의할 점 - 스택을 사용해서 해결한다 → O(N)에 해결 2. 구현 - 스택에 문자와 문자가 위치했던 인덱스 번호를 구조체 형태로 저장하여 쌓는다 - 이때, 스택의 Top에 위치한 원소와 현재 검색하려는 원소가 쌍이라면 스택의 원소를 뺀다 - 이외의 경우에는 스택에 원소를 추가한다 - 위의 방법을 통해 스택에는 쌍을 못이룬 문자들에 대한 정보만 담고 있다 ..
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/77886 코딩테스트 연습 - 110 옮기기 0과 1로 이루어진 어떤 문자열 x에 대해서, 당신은 다음과 같은 행동을 통해 x를 최대한 사전 순으로 앞에 오도록 만들고자 합니다. x에 있는 "110"을 뽑아서, 임의의 위치에 다시 삽입합니다. 예를 programmers.co.kr 1. 주의할 점 - 브루트포스로 풀지 않는다 - 선형시간(O(N))내로 푼다 2. 구현 - 입력 받은 문자열에 대해 110의 개수를 확인한다 - 110을 제외한 문자열을 Deque에 담도록 한다 - 110의 개수가 1개 이상일 때, 문자열 어디에 삽입하면 사전 순서로 가장 빠를지 예상한다 Deque에는 다음과 같은 형태만 들어..
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42884?language=java 코딩테스트 연습 - 단속카메라 [[-20,-15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 1. 주의할 점 - 정렬 기준을 선택한다 - 정렬기준에 따라 더 나은(? 짧은) 방법을 선택한다 2. 구현 - 차량의 끝지점을 기준으로 오름차순 정렬을 한다. 같다면, 시작점의 오름차순으로 정렬한다 - 우선순위큐를 사용하여 각 차량의 구간을 정렬한다 - 1개 뽑은 이후, 이 구간의 가장 오른쪽 끝부분(Right)과 우선순위큐에서 뽑아내는 원소의 가장 왼쪽부분(Cl)을 비교한다 - Right < Cl라면 새로운 구간이 생겨나므로 ..
문제 링크: https://www.acmicpc.net/problem/1662 1662번: 압축 압축되지 않은 문자열 S가 주어졌을 때, 이 문자열중 어떤 부분 문자열은 K(Q)와 같이 압축 할 수 있다. K는 한자리 정수이고, Q는 0자리 이상의 문자열이다. 이 Q라는 문자열이 K번 반복된다는 뜻이 www.acmicpc.net 1. 주의할 점 - 괄호에 대한 처리 - 문자열을 복원 v.s 길이만 구하기 2. 구현 - 문자열을 복원하지 않고 길이만 구해도 되므로, 길이만 구하여 메모리 또한 아낄 수 있도록 한다. 다만, 구현이 좀 더 복잡 할 수 있다 - Stack 2개를 이용하여 해결한다 #예시 234(10) - Len 스택에는 '(' 괄호가 나오기 전의 숫자를 제외하고 계산된 길이. 위의 예시에선 '..
문제 링크: programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 1. 주의할 점 - 회전시킨 문자열은 어떻게 구상할 것인가 2. 구현 - 기존 파라미터로 받은 문자열 SS의 길이를 Len에 저장한다 - SS를 2개 이어서 새로운 SS를 만든다 - For문을 통해 0~Len-1에서 시작해서 Len만큼의 길이를 검사한다 → 회전에 대한 처리를 할 필요가 없다 - Stack을 이용하여 괄호의 짝이 모두 맞아서 Stack이 빈 경우, Answer++를 수행한다 #include #include #include using namespace std; int solution(string ss) { int answer ..
문제 링크: programmers.co.kr/learn/courses/30/lessons/67257 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 programmers.co.kr 1. 주의할 점 - Long Long을 계속 유지하도록 한다 - 헷갈리지 않도록 구현한다 2. 구현 - Expression에서 숫자는 Num 벡터에, 연산자는 Op 벡터에 넣는다. 이때, opChar에는 사용된 연산자의 종류를 저장한다 - DFS() 함수를 통해 사용된 연산자에 우선순위를 부여한다 - Cal() 함수에서 Dq와 Qop를 통해 Num과 Op 벡터의..