[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..
[C++] 백준 1305 번 문제 해설
·
Algorithm/BACKJOON
문제 설명 백준 1305번 문제는 다음과 같다. 1305번: 광고세준이는 길 한가운데에서 전광판을 쳐다보고 있었다. 전광판에는 광고가 흘러나오고 있었다. 한참을 전광판을 쳐다본 세준이는 이 광고가 의미하는 것이 무엇인지 궁금해지기 시작했다. 전광www.acmicpc.net 문제에 관해 간략히 해설하자면, 흔히 보는 전광판에서 글자가 돌아가며 출력될 때, 특정 순간에 전광판을 포착했을 때전광판은 특정 문자열로 구성되어 있을 터인데,전광판 사이즈보다 글자 수가 적다면, 특정 글자가 반복될 것이다. 이 때, 최소 str.length() 가 얼마인지 return 하면 되는 간단한 문제이다.......간단한 문제라고 생각했었는데, 생각보다 복잡하였다.  풀이 시행착오이 문제의 경우 KMP 알고리즘에서 사용되는 m..
[C++] 백준 19942 번 문제 풀이
·
Algorithm/BACKJOON
19942번: 다이어트식재료 N개 중에서 몇 개를 선택해서 이들의 영양분(단백질, 탄수화물, 지방, 비타민)이 일정 이상이 되어야 한다. 아래 표에 제시된 6가지의 식재료 중에서 몇 개를 선택해서 이들의 영양분의 각www.acmicpc.net 이전부터 비트마스킹에 대해서 좀 무시하는 경향이 있었다.때문에 비트마스킹으로 처리할 수 있는 문제도 굳이 우회해서 처리하곤 했는데,이번 문제에서 비트마스킹의 필요성을 느껴 배워서 코딩 하였다.   삽질원래 필자가 생각했던 방법은 다음과 같다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364#includ..