출처 : East Central North America 2001, poj 1028 톡방에서 추천 받은 스택 문제인데 구글에 풀이가 바로 안나오길래 올려놓습니다. 문제 초기 웹 페이지는 acm.org 로 설정된 상태에서 주어진 명령에 따라 웹페이지 및 스택이 변화한다. 우선 스택은 크게 두 종류가 있는데 페이지를 "앞으로 이동하게" 도와주는 forward Stack, 페이지를 "뒤로 가게" 도와주는 backward Stack이 있다. 문제에서 나오는 명령어는 4가지로, BACK, FORWARD, VISIT, QUIT가 있고 각각의 역할은 다음과 같다. BACK : 현재 페이지를 forward Stack에 push하고, backward Stack을 pop해 현재 페이지로 만든다. FORWARD : 현재 페..
전체 글
항공대 알고리즘 동아리 Koala 🥰풀이 더보기 x의 범위가 크기 때문에 1씩 증가시키는 방법으로 풀면 시간초과가 나게 된다. 따라서 이분 탐색을 통해 풀어야 한다. 이 때, 99% 승률에서는 100%가 될 수 없다는 점을 유의하여 예외로 처리해주어야 한다. 소스 코드 더보기 #include using namespace std; long long x, y, z; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> x >> y; z = (y * 100) / x; //바뀌지 않는 경우 if(z >= 99){ cout
풀이 1 더보기 가로등의 위치는 정해져있고 0부터 N까지의 돌다리를 밝혀야 한다. 가로등은 가로등의 위치(pos)에서 가로등의 높이(h)만큼 양 옆으로 밝힐 수 있다. 높이가 높아질수록 비용이 많이 든다 최소 비용을 위해 가로등 높이는 최소가 되어야한다. 1. 가로등의 높이를 x라고 가정하고 생각했을 때 h가 x인 상황에서 돌다리를 전부 밝힐 수 있는지 없는지를 판별할 수 있다. 2. 가로등의 높이가 x일때 돌다리가 전부 밝혀진다면 x보다 높은 높이는 당연히 모든 돌다리를 밝힐 수 있다. 위의 두가지 조건에 의해서 Parametric Search를 이용할 수 있다. 가로등 높이가 될 수 있는 범위(left~right)내에서 이분탐색의 아이디어를 이용하여 특정 높이를 정하고(mid = (left+right..
www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net 풀이 과정 더보기 현재 큐에 들어있는 초밥의 개수를 세기 위한 배열 sushi를 선언합니다. ex) sushi[3] = 2 → 3번 초밥이 2개 들어있다. 초밥을 큐에 넣을 때 다음과 같은 요소를 확인합니다. 1. 이미 큐에 존재하는 종류의 초밥인가? → 맞다면 가지 수는 변하지 않는다. → 아니라면 가지 수에 1을 더해준다. 2. 쿠폰에 해당하는 초밥인가? → 맞다면 b..
www.acmicpc.net/problem/2776 2776번: 암기왕 연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, www.acmicpc.net 수첩1, 수첩2에 적힌 수를 각각 입력받아 수첩2의 번호가 수첩1에 있었는지(0, 1) 출력하는 문제였습니다. 처음에 해시를 사용하여 풀었다가 시간초과가 나서 이분탐색을 사용하여 풀었습니다. 이분탐색에서도 시간초과가 났었는데, cstdio를 사용하니 해결되었습니다! 정렬 left = 0, right = N-1 mid = (left+right)/2 mid가 가리키는 값이면 return mid가 가리키는 값보다 클 때 ..
※docs.microsoft.com/ko-kr/cpp/standard-library/set?view=msvc-160docs.microsoft.com/ko-kr/cpp/standard-library/unordered-set?view=msvc-160 에서 더욱 자세히 살펴보실 수 있습니다. 해시를 매우면서 살펴본 map은 다음과 같은 강점이 있었습니다. 해시는 요소를 저장할 때 키값을 중점으로 레드-블랙 트리로 저장하기 때문에, 레드블랙 트리의 특징을 그대로 가져갑니다. 하지만 정렬과 연산을 매우 많이 해야 할 때는 O(nlogn)의 시간 자체가 부담스러울 수 있습니다. 그래서 우리는 unordered_set을 사용합니다. 이 클래스는 요소를 정렬하여 저장하지 않습니다. 또, 그 자체를 해시로 저장합니다. ..
www.acmicpc.net/problem/17479 17479번: 정식당 일반메뉴는 noodle 2개로 20,000원, 특별메뉴는 cutlet 2개와 friedrice 1개로 32,000원, 둘이 합쳐 52,000원으로 서비스메뉴 하나를 주문할 수 있다. www.acmicpc.net 문제 설명의 양이 상당하지만 로직은 복잡하지 않았던 문제였습니다. 음식 A와 B는 이름(string)과 가격(long long)을 저장하기 위해서 map으로 선언했고 디저트 C는 이름(string)만 존재하기 때문에 set으로 선언했습니다. 문제에서 주어지는 대로 A, B, C의 입력을 처리한 다음에 고객의 주문표가 입력되는데 이 주문표가 문제에서 제시된 음식 주문법에 부합하는지를 판별하는 코드를 작성해야 합니다. 특별메뉴..
www.acmicpc.net/problem/1269 1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net 풀이 더보기 대칭 차집합의 성질을 이용하여 문제를 해결할 수 있습니다. * (대칭 차집합) = (A-B) U (B-A) 결론적으로 대칭 차집합이란 두 개의 집합을 두고 보았을 때, 서로 겹치는 원소를 제외한 나머지가 됩니다. 이러한 대칭 차집합의 정의와 map 자료구조의 중복된 원소는 저장하지 않는 성질을 이용하여 문제를 풀었습니다. 1. a+b만큼 for문을 순회하며 원소를 입력받고, 2. mp(map)..