일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클래스
- 시뮬레이션
- 메모리풀
- 피보나치 수
- dfs
- 재귀
- BFS
- SSAFY
- MST
- 중복 순열
- BeautifulSoup
- 비트마스크
- 백트래킹
- Knapsack
- 그리디
- 문자열
- 순열
- DP
- 분할 정복
- 빠른 입출력
- 조합
- 이분 탐색
- 스택
- 우선순위 큐
- 링크드리스트
- 완전 탐색
- 크루스칼
- lis
- 세그먼트 트리
- 큐
- Today
- Total
목록분류 전체보기 (156)
작심 24/7
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yEBOW/btqEhON2Wij/BxDK87DTa8kXVzJ8WYmVhK/img.jpg)
1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 각각의 좌표를 기준으로 거리 r을 가질 수 있는 범위를 연결해보면 원이 나온다. 따라서 이 문제는 두 원의 위치 관계에 따른 교점의 개수를 구하는 문제이다. 교점의 개수를 기준으로 두 원을 그려보면 이러한 경우의 수들이 나온다 조건문의 순서를 주의해서 작성해주면 끝 #include #include using namespace std; int main() { int T; cin >> T; for (int t = 0; t > x1 >> y..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VBGYr/btqEhOUNdcz/kuVXHUqnFHKddjlub7C7Z0/img.gif)
1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 처음엔 원래 소수 구하던 방식으로 짰는데 자꾸 시간 초과가 되길래 효율적으로 소수 짜는 법을 검색해보니 에라토스테네스의 체 알고리즘이 나왔다. 2부터 원하는 범위까지의 수를 배열에 넣고 소수가 아닌 수들을 체크하는 방식이다. 2의 배수들을 체크 3의 배수들을 체크 4는 2의 배수로 체크가 되어 있어 넘어간다 5의 배수들을 체크 ... 이런 식으로 나아가며 체크되지 않은 수들이 소수이다. 물론 무작정 이중 for문으로 가차 없이 돌려버리면 최악의 시간이 나온다. 안쪽 for문의 증감식..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yqQA6/btqEg1z7dek/kIFJK39FGZtU8ifHC2qe4k/img.jpg)
1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 주어진 순서대로 번호를 매긴 후 점선을 기준으로 그 범위의 최댓값만 나열하니 계차 수열이 나왔다. 계차수열 an을 구한다. i가 0부터 1씩 늘어난다면 n이 짝수인 경우 분수는 n-i/i+1 홀수인 경우 분수는 i+1/n-i 의 형태가 된다. 이런 공식을 찾기만 한다면 끝 #include using namespace std; int main() { int X; cin >> X; int A = 0, n = 1; while (1) { A = 1 + ((n - 1)*(n + 2)) / 2; if (X
11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net 문자열을 정수로 변환하는 방법이 꽤 많았다. 그중 세 가지 방법으로 작성해보았다. 1. string으로 받고 '0'을 빼주어 정수로 변환 #include #include using namespace std; int main() { int N, sum = 0; string st; cin >> N >> st; for (int i = 0; i N; string a; cin >> a; for (int i = 0; i < N; i++) { sum += atoi(a.substr(i, 1).c..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/do9Bc1/btqEggLeUTx/YwTpP0NP8FTGVY7mKW0fBK/img.png)
15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmicpc.net 빠른 입출력을 요한다고 문제에 cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용하라고 대놓고 적혀있다. 이게 뭐지...? 하고 찾아봤더니 이런 식으로 속도를 확 줄여준다고 한다. 그러나 일종의 편법이므로 알고리즘 풀이에는 사용되지만 실무에선 쓰지 않는다고 한다 ios_base::sync_with_stdio(false); cin.tie(NULL); #include using namespace std; int main() { ios_base::sync_..
- 2018년도 게시글 2839번: 설탕 배달 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬� www.acmicpc.net 처음엔 정수 N에 5를 반복문으로 빼는 형식으로 하다가 인풋 중에 4999가 들어가면 5킬로그램 998개와 3킬로그램 3개, 총 1001이 나와야 하는데 이 방식대로라면 5를 두 번 빼면 4989라는 3의 배수가 나오기 때문에 여기서 멈춰버려 합의 최솟값이 나오지 않는다. 그래서 갈아엎고 정수 N을 5로 나눈 후 거기서 -1한 값을 5로 곱하고 그 값을 N에서 뺀 수가 3의 배수이면,,,, 복잡해 보이지만 생각해낸 모든 예제는 통했던 방법을 써봤..
- 2018년도 게시글 11648번: 지속문제 키파는 곱하기를 좋아한다. 그래서 키파는 수를 보면 각 자리 숫자를 모두 곱해서 하나의 수를 만든다. 키파는 기쁘다. 키파는 이 작업을 계속해서 반복한다. 그런데 수가 한 자리가 되었��www.acmicpc.net예전에 풀었을 땐 c언어로 goto함수 써서 복잡하게 했었는데지금은 조금 다르게 푼 문제이다그런데 while (a!=0)대신 while (a % 10 !=0)를 쓰니 오답이길래무슨 차이가 있나 하면서 고치니 정답이 떴다아무리 생각해도 이게 안 되는 예제가 떠오르지 않는다ㅠ#include using namespace std; int main() { int a; cin >> a; int count = 0; int res = 1; if (a < 10)co..
- 2018년도 게시글 10808번: 알파벳 개수단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.www.acmicpc.net처음에 cin.getline(S, 101); for문 돌리는 수를 101까지로 잡아주니까 틀렸다고 했다. 그래서 getline방식을 바꿨다. 에 있는 getline() 함수 string str; getline(cin,str); //표준 입출력#include #include using namespace std; int main() { string S; getline(cin, S); int alpha[26] = { 0 }; for (int i = 0; i < S.size(); i++) { alpha[(int)S[i] - 97]++; } for ..