
#include int main(void) { int n; scanf("%d", &n); //테스트 케이스 while(n--) { int tmp; scanf("%d", &tmp); //입력 int tmp2 = tmp/28; //1부터 15까지 찍고 다시 2까지 내려오는데, 구간의 크기가 28개이다. if(tmp%28 == 0) tmp2--; //1부터 28까지 하나의 구간이나, 28인 경우 tmp2가 0이 아니라 1이 된다 즉 28로 나눠지는 경우는 1을 감소시킨다,. tmp -= tmp2 * 28; //1~15~2의 구간을 구한 다음 이 구간의 개수 * 28을 하여 제하면, tmp는 1부터 28 사이의 값으로 결정된다. if(tmp > 15) tmp = 30-tmp; //16 이상을 14 이하로 바꿔줍..
#include int main(void) { char sosu[1000002] = {1, 1}; //소수는 0, 아닌건 1로 저장 int arr[80001] = {}; //소수들을 오름차순으로 저장하는 배열 int p = 0; //소수들을 저장하는 데 사용하는 변수 for(long long i=2; i1000000) break; //1000000까지 다 했다면 종료 for(long long j = i*i; j tmp2) { //만약 소수가 입력받은수 - 소수보다 크다면, 이는 반복을 할 의미가 없다. 홀수인 소수 두개로 만들수 없음을 의미한다. printf("Goldbach's conjecture is wrong.\n"); break; //종료 } if(!sosu[tmp2]) { //만약 입력받은수 -..

#include //위 아래는 각각 면적이 n*m 입니다. //n축, m축이 있다고 하면 n축에서 앞 뒤로 보는 면적과, m축에서 앞 뒤로 보는 면적을 더합니다. //n축, m축에서 면적을 셀 때는, 이전 칸(없다면 0으로 봄)보다 얼마나 더 높은지를 더해주면 됩니다. 같거나 더 낮다면, 드러난 면적이 없습니다. int main(void) { int n, m; scanf("%d %d", &n, &m); //n, m 입력 int ans[n][m]; int Ndown[m]; int Mleft[n]; for(i=0; i
#include int main(void) { char s; int U=0, D=0; for(; ~(s = getchar()) ;) { if(s == 'U' || s == 'C') U++; if(s== 'D' || s== 'P') D++; } if(U>D/2+(D&1) && D) printf("UDP"); else if(D) printf("DP"); else printf("U"); return 0; } 풀이 : 그리디 알고리즘 1. 문자열을 getchar()로 받습니다. 그다음 버퍼에서 하나씩 꺼내서 U (C 또는 U)가 몇개인지, D(D 또는 P)가 몇개인지를 계산합니다. 2. 문제의 입력은 EOF으로 끝나며, getchar에서 EOF는 -1이라는 정수값으로 s에 들어가게 됩니다. 이러한 -1을 not..
- Total
- Today
- Yesterday
- 그리디
- Krustal
- 기하학
- PASCAL
- union
- 누적 합
- 그래프
- DP
- BFS
- 누적합
- DFS
- 정렬
- Segment Tree
- 오프라인 쿼리
- 플로이드
- 백준
- C++
- find
- 브루트포스
- 최대공약수
- 덱
- 스택
- 1835
- 최소 스패닝 트리
- 세그먼트 트리
- java
- XOR
- C언어
- Lazy Propagation
- 1835번
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |