백준/실랜디, 골랜디 23

[백준] C++ AC(5430)

간단하게 R와 D의 두 종류의 함수를 입력받아서 결과를 출력하는 문제이다.R은 뒤집는 역할을 하고 D는 가장 앞에 있는 수를 버리는 역할을 한다.앞 뒤를 뒤바꾸는 문제이기 때문에 deque을 떠올릴 수 있어야 한다. 문제풀이방법1. 우선 입력으로 주어지는 숫자를 파싱 해서 deque에 저장한다.(99,40,51 이렇게 두 자리가 들어올 수도 있기 때문에 구분을 잘해야 함. 나는 ', '와 ']'이게 들어오기 전에는 string temp에 계속 저장하고 저 문자가 들어오면 큐에 push 하는 방식으로 진행하였다.)2. 방향을 나타내는 변수와 error를 판단하는 변수 또한 필요하다.3. 방향이 역방향이면 back에서 pop 정방향이면 front에서 pop을 진행한다.(pop을 진행했는데 deque에 요소가..

[백준] 스택 수열(1874)

스택을 사용해서 푸는 간단한 문제이다!!...1~n까지의 수를 push, pop을 해서 예제 입력에 넣는 수열을 만들 수 있는지 없는지를 판별하는 문제이다.만약 만들 수 있다면 push, pop연산의 순서를 출력하고 만들 수 없다면 NO를 출력하면 된다. 이 문제에서 주의할 점은 empty인 상태에서 top의 값을 확인하려고 시도하는 것이다.empty인 상태에서 top의 상태를 확인할 수 없다.만약 empty라면 push를 해주자. 마지막까지 push를 하고 만약 지금 원하는 값과 스택의 top값이 다르다면 불가능한 경우로 판단하고 NO를 출력한다. #include #include #include using namespace std;int arr[100001];stack st;queue q;int mai..

[백준] 나무 자르기(2805) *

나무를 위에서부터 잘라서 적어도 M미터의 나무를 집으로 가져가야 할 때 높이의 최댓값을 구하는 문제이다.간단하게 위에서부터 모두 확인하면 문제를 해결할 수 있어 보이지만... 이 문제의 입력값을 잘 보아야 한다. 나무의 길이(20억까지)나무의 수(100만까지) for문으로 일일이 전부 다 확인하면 무조건 시간초과가 발생할 것이다.그렇다면 이 문제는 어떻게 해결해야 하는가??이분탐색을 이용해서 해결하면 된다.이분탐색이란 L와 R 그리고 mid의 값을 가지고 왼쪽으로 갈지 오른쪽으로 갈지 확인하는 것이다. #include #include using namespace std;long long arr[1000001];int main(void){ long long N = 0; long long M = 0; lon..