일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
31 |
- 그래프
- DFS
- 티스토리챌린지
- Sort
- int
- 깊이우선탐색
- 백트래킹
- Set
- map
- 우선순위큐
- stoi
- 정렬
- DP
- N과M
- 다이나믹프로그래밍
- 오블완
- 분할정복
- vector
- 알고리즘
- C++
- 프로그래머스
- 최소공배수
- BFS
- 유클리드호제법
- 에라토스테네스의 체
- 백준
- 문자열
- 배열
- priority_queue
- 이분탐색
- Today
- Total
목록전체 글 (220)
안녕 세상아,
https://www.acmicpc.net/problem/10974 10974번: 모든 순열 N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오. www.acmicpc.net 전형적인 백트래킹 문제이다. N과 M 문제 풀어봤으면 걍 눈 감고도 풀기 가능하다. https://hello-world-cpp.tistory.com/2 [백준/c++] 15649 N과 M(1) https://www.acmicpc.net/problem/15649 전형적인 백트래킹 문제,, DFS를 참고해서 풀면 된다. 중복도 허용하기 때문에 백트래킹계의 순열이라고 볼 수 있다. DFS의 재귀를 이용하여 풀었다. 자세한 설명은 코 hello-world-cpp.tistory.com 여기 더 ..
https://www.acmicpc.net/problem/15654 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 이번 시리즈는 새로운 배열을 하나 만들고 입력받는 그러한 과정만 거치면 N과 M (1)과 똑같다. 배열 값을 입력 받은 후 sort만 해주면 된다. 계속 풀다보니까 백트래킹을 100중에 3정도는 알 것 같은 느낌이다. 다양한 문제를 더 풀다보면 갑자기 어느순간 확 느는 느낌을 받을 수 있길 바라며.. #include #include #include using namespace std; i..
set, map의 차이는 set은 key값만 저장하고 map은 key값과 value를 저장한다. set과 map 둘 다 중복을 허용하지 않는다. 또한, 둘 다 컨테이너 내부에서 오름차순으로 정렬 된다. std::set 컨테이너 template class set; key 타임의 키(key) 값을 저장하는 연관 컨테이너 저장된 데이터는 키 값을 기준으로 정렬됨 (오름차순) 데이터 삽입, 삭제, 탐색은 0(log n) 시간 복잡도로 동작 (균형잡힌 이진탐색트리 사용) 중복되는 데이터를 set구조로 저장하려면 std::multiset 컨테이너 사용 데이터 정렬되지 않은 상태로 저장하려면 std::unordered_set 컨테이너 사용 #include 에 정의 begin(), end(), rbegin(),..

https://www.acmicpc.net/problem/14425 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net 생각보다 간단하게 풀렸던 것 같다. 입력값의 범위가 N, M 모두 최대 10,000이기 때문에 최악의 경우 10의 8승까지 나오게 될 것 같아서 겁 먹고 시작했지만 간단하게 풀렸다. 2중 for문을 사용하면 시간초과가 될 것이기에 신경쓰면서 풀었던 것 같다. vector를 사용하면 시간초과가 나기 때문에 set을 사용하는 것이 좋을 것 같다. 그냥 set을 사용해도..
https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 내 기준 어려웠다. 내가 구현에 특히 약한 것 같긴 하다. 사실 약하지 않은 부분 없음 예시를 보고 왜 이런 답이 나오는지 수식을 짜기가 어려웠다. 결국 공식은 : (같은 종류 의상의 수 + 1) - 1 이다. 여기서 -1을 해주는 이유는 알몸일 때를 빼주는 것이다. ex) headgear=3, face=..
https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net dp 기본 문제. int 값 범위 넘어가는 것만 신경써주면 쉽게 풀 수 있다. #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long int dp[1001]; dp[1] = 1; dp[2] = 2; for (long long int i = 3..

에라토스테네스의 체는 유명한 소수 구하기 문제이다. 시간 복잡도가 O(N^1/2)이기 때문에 많은 양의 소수를 구할 때 유용하게 사용할 수 있다. 원리는 간단하다. 2의 배수인 수를 모두 지운 후 2는 옆에 적어준다. 이후 지워지지 않은 가장 작은 수(n) 부터 n의 배수를 지워주고 n을 옆에 적어주면 된다. #include using namespace std; int n = 120; int main() { ios::syn_with_studio(false); cin.tie(NULL); cout.tie(NULL); int arr[121]; //배열에 값 입력 for (int i = 2; i
https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net min값을 가장 크게 두고 계속 작은 값 갱신하면서 곱해주면 된다. #include #include #include using namespace std; long long int street[100001];//도시 간 거리 long long int oil[100001];//리터 당 가격 int main() { ios::sync_with_stdio(false); cin.tie(NULL..
https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net N과 M(1)을 조금만 변형하면 쉽게 풀린다. #include using namespace std; int n, m; int arr[10]; void dfs(int depth) { if (depth == m) { for (int i = 0; i < m; i++) { cout m; dfs(0); }
https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 큐의 양쪽에서 삽입 삭제가 이루어지기 때문에 deque를 사용해야한다. deque를 사용해야하는 것은 쉽게 알 수 있다. dq 크기의 반 이하인지, 이상인지 구해야하지만 괜히 복잡하게 생각해서 함수 두개 따로 만들어서 min값 받으려고 했다. 하다보니까 뭔가 이상하고 잘 안돼서 노선 바꿈..물론 이런 방법으로도 풀 수 있겠지만 푸는 사람이 많이 없는 이유가 있겠지..? 암튼 정답 코드는 입력받..