일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 구현
- 삼성 SDS 대학생 알고리즘 특강
- BOJ
- 그리디
- 삼성 기출
- PS
- C++
- SWEA
- 에라토스테네스의 체
- 맛집
- 백트래킹
- 백준
- 스택
- DP
- 동적 계획법
- BFS
- 알고리즘
- 소수
- 해커랭크
- 잠실
- dynamic programming
- sw expert academy
- Algorithm
- 다이나믹 프로그래밍
- hackerrank
- 시뮬레이션
- 브루트포스
- koitp
- 완전탐색
- dfs
- Today
- Total
목록C++ (70)
펭로그
문제링크 : https://boj.kr/2309 무식하게 그냥 연산하면 풀리는 브루트 포스 알고리즘 문제이다.우선 모든 값을 sum에 더하고 2개의 원소를 뽑아서 뺀 후 100이 나오면 종료한다.생각할 수 있는 경우의 수가 적어서 단순하게 풀었다. 12345678910111213141516171819202122232425262728293031323334353637383940// BOJ 2309 일곱 난쟁이#include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); freopen("../input.txt", "r", stdin); vector dwarf; int input, ..
문제 링크 : https://boj.kr/7576 이 문제보다 기본 개념의 문제는 BOJ 2178 미로 탐색을 참고 컨셉을 잡는 데에 상당히 어려울 수 있지만 알고보면 기본적인 BFS 문제인 것 같다.map을 int형 컨테이너로 하나 만들어 입력 정보를 받고 이 정보를 visited로 사용하면 된다.현재 탐색하는 위치 정보는 별도의 구조체를 만들어 여기에 x, y 좌표와 BFS 탐색의 몇번째 단계에 해당하는지 level 변수를 추가하였다.입력 받을 때 익은 토마토를 발견하면 그 즉시 바로 큐에 담는다.큐에 담긴 순서대로 BFS를 수행하면 문제가 쉽게 풀리게 된다.BFS를 다 수행한 이후엔 다시 한번 전수조사를 해서 안익은 토마토를 체크했다. 12345678910111213141516171819202122..
문제링크 : https://boj.kr/10026 현재 위치를 기준으로 상, 하, 좌, 우의 4방향을 DFS로 탐색해서 같은 영역인지 여부를 확인한다.같은 영역이 아닐 경우 빠져나오며 단 한번이라도 같은 영역이 나오면 true를 반환한다.시간 복잡도에는 크게 영향이 없을 것 같으나 편의를 위해서 한번 탐색한 'R'은 'G'로 바꿔주도록 했다.dfs 탐색 도중 중간에서 반환하는 false의 경우는 최초 dfs 실행 후 담을 chk 변수가 아닌 이상 딱히 의미는 없다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263// BOJ 10026 적록색약#..
문제링크 : https://boj.kr/11653 어떤 숫자의 소인수들은 소수들의 곱으로 표현할 수 있다.그러기 위해선 입력 숫자의 범위만큼 소수 리스트를 구해서 해당 소수들이 입력 숫자로 나누어 떨어지는지를 계산하고 이를 무한히 반복하여 더이상 나누어 떨어지지 않을 때까지 나누면 된다. 다만, 소수 리스트를 다 구할 필요는 없고 입력 숫자의 제곱근 범위까지만 구하면 된다.제곱근보다 큰 범위의 숫자를 2개 이상 서로 곱하면 입력 숫자를 초과하기 때문에 더 이상 구할 필요가 없다.소수 리스트에 속하지 않은 남은 숫자는 무조건 소수이다. (해당 숫자가 소수 리스트의 곱으로 표현되는 순간 소수가 아니다.) 소수 판별은 에라토스테네스의 체를 이용하여 구하면 더 빠르게 구할 수 있다. 123456789101112..
문제링크 : https://boj.kr/1260 가장 기본적인 DFS, BFS 문제이다.시간초과 때문에 애먹었었는데.. 백준 사이트 자체 채점 시스템은 제약조건이 너무 많은 것 같다.std::cin과 같은 것도 조심해야 하고 for each 구문도 조심해야 하는듯....편하려고 STL을 사용하면 문제 생기는 부분이 좀 있는 것 같다. 1234567891011void dfs(int num){ if(!visited[num]) sort(node[num].begin(), node[num].end()); visited[num] = true; for(int i : node[num]) { if (!visited[i]) { cout
문제링크 : https://boj.kr/2960 시작 숫자부터 해당 숫자만큼의 배수로 탐색하여 답을 찾아가면 된다.단 한번도 특정 숫자로 나누어 떨어지지 않은 숫자는 모두 소수이고 그 소수의 배수들은 소수가 아닌 수가 된다. 소수를 구하는 알고리즘은 다음과 같다.처음으로 지워지는 숫자인 파란색은 소수이고 지워진 수는 소수의 N 배수이다. 배수가 되는 순간 소수가 아니기 때문에 당연히 파란색만 소수가 된다. 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2의 배수 제거2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 3의 배수 제거2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 5의 배수 ..
문제링크 : https://boj.kr/2252 위상정렬을 이용한 문제로 자신을 가리키는 간선이 없는 경우 즉, indegree가 0인 정점을 찾는다.자신을 가리키는 간선(indegree)가 1개 이상 있다는 의미는 자신의 노드가 뒷쪽에 나와야 한다는 것을 의미한다.찾은 정점을 큐에 넣고 간선을 삭제한다.반복 자료 입력 순서가 중요하면 우선순위 큐를 사용하면 된다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344// BOJ 2252 줄 세우기// DAG (Directed Acyclic Graph)// 순환을 가지지 않는 방향그래프// 위상정렬 (Toplogical Sort)#include #include #in..
문제링크 : https://boj.kr/1717 시간 제한을 신경써야 하는 문제로 iostream의 std::cin을 쓸 경우 시간 초과가 난다.scanf를 사용하거나 ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 를 같이 사용해야 한다.std::endl 도 마찬가지로 시간이 오래 걸리는 키워드로 "\n"을 써주는 편이 훨씬 빠르다고 한다. 그래프 문제로 처음엔 서로소 집합으로 자기 자신을 참조하는 형태로 노드를 표현한다. 연산이 될 때마다 루트노드를 업데이트 시킨다.int find(int node) { if (root[node] == node) return node; else return find(root[node]);}위의 경우 f..
문제링크 : https://www.acmicpc.net/problem/1966 2개의 배열을 선언하여 각각 동일하게 입력받은 후 한 배열은 우선순위 순서대로 정렬하여 순서대로 카운트한다.정렬된 배열은 우선 순위가 가장 큰 숫자가 맨 뒤로 가게되므로 배열을 탐색하는 도중에 해당 숫자가 발견되면 ptr을 줄여가면서 옮겨주는 방식이다.그리고 모든 배열을 다 탐색하였을 경우 다시 원점으로 돌아가야 하기 때문에 % num 모듈러 연산을 하였다. 1234567891011121314151617181920212223242526272829303132333435363738// BOJ 1966 프린터 큐#include using namespace std; int main() { freopen("../input.txt", "..
1. JetBrains 소개 C/C++ 초급 개발자라면 보통 비주얼 스튜디오를 이용하여 개발하는 것이 보편적이며 입문자들의 대부분은 비주얼 스튜디오로 시작하는 편이다. 학원이나 학교에서 그렇게 가르쳐주기 때문이다. 그리고 한글이니까..? 게다가 Community 버전은 무료니까...!!! 비주얼 스튜디오는 정말 편리하고 빠른 개발환경을 제공한다. 프로젝트를 생성하고 이것저것 환경설정을 따로 해줄 필요가 없어 간편하다.makefile을 만들 필요도 없고 그냥 솔루션 폴더에 cpp 파일과 헤더 파일을 넣고 필요하면 외부 라이브러리를 추가하기만하면 간단한 설정만으로도 프로젝트 환경을 구축할 수 있다. [백준 온라인 저지 사이트에서 꽤나 빈번하게 발생하는 컴파일 에러] 하지만, 최근 알고리즘 공부를 하면서 비주..