알고리즘/BOJ 1235

백준 10814번 나이순 정렬

문제 링크입니다: https://www.acmicpc.net/problem/10814 간단한 문제였지만 나이가 같을 경우에 std::sort의 경우 순서를 보장하지 않는 반면 std::stable_sort는 순서를 보장해주기 때문에 stable_sort를 사용하여 정렬해야 AC를 받을 수 있는 문제였습니다.stable_sort에 대해서는 다음 링크를 참고하시면 됩니다!(https://en.cppreference.com/w/cpp/algorithm/stable_sort) #include #include #include #include using namespace std; int N; vector v; bool cmp(pair a, pair b) { if (a.first < b.first) return tr..

알고리즘/BOJ 2018.07.11

백준 11652번 카드

문제 링크입니다: https://www.acmicpc.net/problem/11652 적혀 있는 수는 -2^62보다 크거나 같고 2^62보다 작거나 같기 때문에 자료형을 long long으로 해주는 것이 핵심이였습니다.카드에 적혀있는 숫자를 벡터나 배열에 집어넣고 정렬을 한 뒤, 최대 출현빈도수를 갖는 숫자를 출력해주면 되는 문제였습니다.비교하는 숫자가 같지 않을 경우 두 가지의 경우를 고려해야합니다.1. 최대 출현 빈도수를 갱신하는 경우2. 최대 출현 빈도수를 갱신하지 않는 경우 반면, 비교하는 숫자가 같은 경우에는 현재 숫자의 빈도수를 늘려주면 됩니다. #include #include #include using namespace std; int N; vector v; void printCard(voi..

알고리즘/BOJ 2018.07.11

백준 1102번 발전소

문제 링크입니다: https://www.acmicpc.net/problem/1102 비트마스킹과 DP를 적절히 이용해야지만 풀 수 있는 문제였습니다.발전소의 상태가 string으로 주어지지만 'Y' = 1, 'N' = 0으로 바꾸어서 비트 형태로 표현하면 메모이제이션을 할 수 있기 때문에 비트마스킹을 이용했습니다. 알고리즘은 아래와 같습니다.1. P가 0일 때는 발전소를 고치지 않아도 되기 때문에 비용이 0입니다.2. 현재 작동되는 발전소에 대해서만 minCost 함수를 호출합니다.i) 0 ~ (N-1) 발전소 중 고장난 발전소를 찾습니다.ii) 고장난 발전소를 고치고 발전소의 상태를 업데이트합니다.iii) 업데이트 된 상태에서 고장나지 않은 발전소에 대해서 2번을 반복합니다. *풀긴 풀었지만 이해가 가..

알고리즘/BOJ 2018.07.10

백준 1021번 회전하는 큐

문제 링크입니다: https://www.acmicpc.net/problem/1021 왼쪽으로 쉬프트하는 경우와 오른쪽으로 쉬프트하는 경우 모두 존재하기 때문에 이를 쉽게 구현할 수 있는 덱(deque)을 사용하여 문제를 풀었습니다.알고리즘은 아래와 같습니다.1. 1~N까지 덱에다 집어넣고 뽑아내고자 하는 수의 위치를 iterator를 통해 찾습니다.2. 찾은 위치를 통해 좌우로 쉬프트하는 경우 중 어떤 경우가 유리한지를 찾아내고 유리한 쪽으로 쉬프트를 진행합니다. #include #include #include using namespace std; int N, M; deque dq; int main(void) { cin >> N >> M; for (int i = 1; i > idx; int cur = 1..

알고리즘/BOJ 2018.07.10

백준 10828번 스택

문제 링크입니다: https://www.acmicpc.net/problem/10828 백준 10845번 큐(http://jaimemin.tistory.com/661)처럼 자료구조를 복습하는 문제였습니다.스택에 대한 개념을 안다면 어렵지 않게 풀 수 있는 문제였습니다. #include #include #include using namespace std; int N; stack s; int main(void) { cin >> N; for (int i = 0; i > command; if (command == "push") { int num; cin >> num; s.push(num); } else if (command == "pop") { if (!..

알고리즘/BOJ 2018.07.10

백준 2157번 여행

문제 링크입니다: https://www.acmicpc.net/problem/2157 비교적 낮은 정답률인데도 불구하고 한번에 AC를 받아 기분 좋았던 DP 문제였습니다.현재 위치한 도시와 해당 도시가 몇 번째 방문하는 도시인지를 표시하며 메모이제이션을 하면 되는 문제였습니다.기내식을 입력받을 때 한 도시에서 다른 도시로 가는 비행기가 여러대 있을 수 있기 때문에 제일 맛있는 기내식을 제공하는 비행기를 채택하는 것이 핵심이였습니다.기저 사례는 도시를 M번 거쳤는데 N번째 즉, 도착지점에 도달 못하는 경우이고 M번 이내에 N번째 도시를 방문하면 조건이 성립됩니다.코드 자체는 어렵지 않기 때문에 코드를 보시면 쉽게 이해가 가실거라고 생각됩니다! **수정**해당 코드는 재채점 결과 틀림 처리가 되었고 새로 작성..

알고리즘/BOJ 2018.07.10

백준 3043번 장난감 탱크

문제 링크입니다: https://www.acmicpc.net/problem/3043 문제에서 요구하는 조건은 각각의 행과 열에 오직 하나의 탱크를 배치하는 것입니다.따라서, 탱크를 상하로 먼저 움직인 뒤 좌우로 움직여주면 조건을 충족시킬 수 있습니다.탱크를 움직이는 기준은 아래와 같습니다.1. 상하로 움직일 경우 y를 기준으로 정렬한 뒤 1 ~ N까지 반복문을 돌리면서 y가 해당 칸보다 아래에 있으면 위로 가야하고 해당 칸보다 위에 있으면 아래로 움직여줘야합니다.2. 좌우로 움직일 경우도 마찬가지로 x를 기준으로 정렬한 뒤 1~N까지 반복문을 돌리면서 x가 해당 칸보다 오른쪽에 있으면 왼쪽으로 가야하고 왼쪽에 있으면 오른쪽으로 움직여줘야합니다. ssangba55(https://blog.naver.com/..

알고리즘/BOJ 2018.07.09

백준 2407번 조합

문제 링크입니다: https://www.acmicpc.net/problem/2407 백준 1793번 타일링(http://jaimemin.tistory.com/618)처럼 long long 자료형의 범위를 벗어나는 답을 구해야하기 때문에 string을 통해 Big Integer를 구현합니다.조합의 경우 간단한 DP를 통해 구할 수 있기 때문에(nCr = n-1Cr + n-1Cr-1) 별도의 설명이 필요가 없습니다. #include #include #include #include //memset using namespace std; const int MAX = 100 + 1; int N, M; string cache[MAX][MAX]; string bigNumAdd(string num1, string num..

알고리즘/BOJ 2018.07.08