[C++] 백준 17142 문제 해설
·
Algorithm/BACKJOON
해당 문제는 골드 3 티어이지만, 나는 동의하지 않는다.골드 2티어에서 골드 1티어까지 부여할만한 문제라고 생각한다.문제 자체를 이해하는 과정이 직관적이지 않기에다른 골드 3 티어 문제보다 난이도가 높다고 생각한다.#include #include #include #include class baekjoon_17142{public: int N, M; int blank_count{}; std::vector> loc_virus; // 바이러스의 위치를 기억할 벡터 std::vector> content; int directions[4][2] = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}}; // 동서남북 const int MAX_INT = 2147483647; // 모든 가능한 조합을 저장할 이..
[C++] 백준 14890 문제 해설
·
Algorithm/BACKJOON
해당 문제는 삼성 SW 역량 테스트 에서 출제된 문제로골드 3 티어의 적절한 난이도를 지니고 있는 문제이다. 2차원 벡터를 기준으로 각 행, 열이경사로를 설치하여 '지나갈 수 있는 길인지' 구하는 문제이다. #include #include #include class baekjoon_14890{public: int N, L; bool constraint(const std::vector& line) { int value_before = line[0]; int limitPoint = 0; for (int i = 1; i = 2) return false; // 현재값이 이전 값보다 1 작을 경우. ..
[C++] 백준 1012 문제 해설
·
Algorithm/BACKJOON
해당 문제는 BFS, DFS 를 통해 해결할 수 있는 문제이다.난이도는 실버 2 티어이다. 연습하기 좋은 문제라고 느껴 BFS, DFS 두가지 유형으로 모두 풀어보았다.소스코드에 적절한 주석을 작성해 두었으므로, 보면서 이해하면 좋다. BFS#include #include #include #include class baekjoon_1012_bfs{public: static const int MAX = 50; int field[MAX][MAX]; bool visited[MAX][MAX]; int directions[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; // 서, 동, 남, 북 int M, N, K; // 핵심은 bfs를 통해서 vi..
[C++] 백준 1343 문제 해설
·
Algorithm/BACKJOON
백준 1343 문제는 실버 5티어 정도의 문제로 그다지 어려운 문제는 아니다.#include class baekjoon_1343{public: int run() { std::string input; std::cin >> input; std::string result; int count = 0; for (char ch : input) { if (ch == 'X') { ++count; } else if (ch == '.') { // 짝수가 아닐경우 폴리오미노 제작 불가, 종..
[C++] 백준 2002 문제 해설
·
Algorithm/BACKJOON
2002번: 추월입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이www.acmicpc.net처음에는 별생각없이 풀었고, 나중에 다들 map 을 쓴다는걸 알게되어서 추가하였다.두가지 버전 모두 첨부한다.map(X)#include #include int main(){ int N; bool visited[1000] = {false, }; std::vector input; std::vector output; std::cin >> N; std::string temp; // 입력 로직 for(int i = 0; i > temp; input.push_..
[C++] 백준 14501 문제 해설
·
Algorithm/BACKJOON
14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 해당 문제에 대해서 여러 풀이가 존재하지만, 이 풀이가 가장 좋아보이기에 주석을 달아 포스팅 해 본다. 해당문제에서 명심해야 할 점은 그냥 최고 급여만 출력하면 된다는 점이다. 날짜는 기록할 필요도 없다. 힌트는 '거꾸로' 계산하는 것이다. 예로 문제 내용을 보면 7일과 6일은 근무일을 넘어가기에 계산에 포함시켜야될 필요도 없다. 5일 = 15 O 4일 = 20 + 15 O 3일 = 10 + 20 + 15 O 2일 = 20 < (10 + 20 + 15) X 1일 = (10 + 20 + 15) == (10 + 20 + 15) O 따라서 최고로 나올 수 있는 값은 45 이다. 위 지식을 기반으로 아래 코..
[C++] 백준 1260번 문제 해설
·
Algorithm/BACKJOON
1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net DFS, BFS 관련된 문제로 간단한 문제이다. 해석은 주석으로 기재 해 두었으며 코드의 흐름따라 주석과 함께 코드를 읽어보면 쉽게 이해가 될 것이다. #include #include // 이론상 정점의 개수는 1,000 개 이며 1 < N < 1000 이므로 1001 지정. // 간선의 개수는 10,000 개 미만임. // map 을 기준으로 1,000 x 1,000 = 1,000,000 의 간선 지정이 가능. #defin..
[C++] 백준 15649 문제 해설
·
Algorithm/BACKJOON
15649번: N과 M (1)한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해www.acmicpc.net이 문제는 n 과 m 을 입력받아.자연수 $1 \sim N$ 까지의 자연수 중 중복 없이 이뤄진 수열 $M$ 개를 도출한다. 설명이 조금 애매한데, 예제를 보면 쉽게 이해가 가능하다.엄밀히 말해 $1 \sim N$ 까지의 자연수 중 $M$ 개로 이뤄진 수열의 '모든 조합' 을 찾는 것이다.#include int n, m;int arr[9] = { 0, };bool visited[9] = { 0, };void DFS(int cnt){ // cnt 와 m 간의 1의 갭을..
[C++] 백준 1019 문제 해설
·
Algorithm/BACKJOON
1019번: 책 페이지첫째 줄에 0이 총 몇 번 나오는지, 1이 총 몇 번 나오는지, ..., 9가 총 몇 번 나오는지를 공백으로 구분해 출력한다.www.acmicpc.net문제 내용은 한번 읽으면 모두 파악할 수 있을정도로 간단하다.그런데 난이도는 골드 1 티어로 생각보다 높은편에 속한다. + 2024/06/10해당 문제의 난이도가 플레티넘 5 티어로 상향되었습니다. 1. 헤딩#include #include int N;long long zero = 0;long long one = 0;long long two = 0;long long three = 0;long long four = 0;long long five = 0;long long six = 0;long long seven = 0;long long ..
[C++] 백준 2166번 문제 해설
·
Algorithm/BACKJOON
2166번: 다각형의 면적 첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다. www.acmicpc.net 이 문제는 생각보다 쉬운데, 난 많이 돌아서 풀었다. 신발끈 공식을 적용하지 않은 풀이 방법이다. 1. 그냥 풀어 보았다 #include #include #include struct Point { public: int x; int y; }; std::vector dots; int count; // 2차원 평면공간서 두 점의 거리를 구합니다. double getDistanceBetweenPoints(Point d1, Point d2) { return std::sqrt(std::pow((d2..