일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BFS
- 스택
- DP
- 백트래킹
- C++
- 에라토스테네스의 체
- 시뮬레이션
- SWEA
- sw expert academy
- 동적 계획법
- 백준
- 맛집
- 그리디
- dynamic programming
- koitp
- 소수
- 다이나믹 프로그래밍
- hackerrank
- 구현
- 삼성 SDS 대학생 알고리즘 특강
- 해커랭크
- 완전탐색
- Algorithm
- 알고리즘
- PS
- 잠실
- BOJ
- 삼성 기출
- dfs
- 브루트포스
- Today
- Total
목록BOJ (65)
펭로그
문제링크 : https://noj.am/13458 단순 구현 문제인데 정답률이 25%대로 낮은 문제이다.그 이유는 출력 자료형을 다들 고려하지 않아서 그런 것 같다.최대로 나올 수 있는 값이 1,000,000 * 1,000,000이기 때문에 long long 타입을 사용해야한다. 1234567891011121314151617181920212223242526272829303132// BOJ 13458 시험 감독#include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);// freopen("../input.txt", "r", stdin); int num, main, su..
문제링크 : https://boj.am/1991 문제에서 입력은 A~Z로만 한정되어 있다. 이러한 특성 덕분에 간단한 형태로 트리를 구현할 수 있다.char 형태의 A(65) ~ Z(90)에서 A(65)씩 빼주면 A(0) ~ Z(25)로 표현할 수 있기 때문이다.따라서, 인덱스 번호 자체가 노드에 들어있는 문자를 의미하는 것이기 때문에 2개의 배열 만으로도 트리의 구현이 가능하다. 현재 노드를 V, 좌측 자식 노드를 L, 우측 자식노드를 R이라고 한다면전위순회는 V-L-R 순서로중위순회는 L-V-R 순서로후위순회는 L-R-V 순서로 순회하게 된다. 스택을 이용하여 구현을 하려고 시도해봤으나 너무 복잡하여 재귀로 구현했다. 1234567891011121314151617181920212223242526272..
문제링크 : https://noj.am/8916 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071// BOJ 8916 이진 검색 트리#include using namespace std; long long comb(int n, int r) { // nCr r = n - r > r ? r : n - r; long long result = 1; for (int i = 0; i tc; while (tc--) { int num, input; vector tree(1); cin >> num; while(num--) { int i..
문제링크 : https://noj.am/11403 전형적인 BFS / DFS 문제그냥 풀면 된다. 자기 자신노드로 돌아오는 경우가 있기 때문에 맨 처음은 방문체크를 하지 않았다.인접리스트는 graph[0] = {1, 3, 5, 6, 7} 이런 형태로 저장된다. 현재 노드에서 해당 노드로 갈 수 있으면 저장된다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253// BOJ 11403 경로 찾기#include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cou..
문제링크 : https://boj.kr/11726 시뮬레이션을 해보면 아래 그림과 같이 규칙을 찾을 수 있다.하나의 타일을 1*2로 고정 시키면 N-1의 모든 케이스를 적용할 수 있고두개의 타일을 2*1 두개로 고정 시키면 N-2의 모든 케이스를 적용할 수 있다. 하지만, 여기서 신기한 점은 1, 2, 3, 5.... 피노나치 수열과 동일한 문제임을 알 수 있다. 12345678910111213141516171819202122232425// BOJ 11726 2xn 타일링#include using namespace std; int dp[1001]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // freopen..
문제링크 : https://boj.kr/3048 개미 그룹이 서로 -> 는 소문자 str[n1 - i]; str[n1 - i] = str[n1 - i] - 'A' + 'a';}for (int i = n1; i > str[i];cs 12345678910111213141516171819202122232425262728293031323334353637383940414243444546// BOJ 3048 개미#include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); freopen("../input.txt", "r", stdin); int n1, n2, cnt; c..
문제링크 : https://boj.kr/11559 1. 블럭은 4개 이상 모였을 때 터짐2. 동시에 터지는 것은 하나의 연쇄 단계임3. 한 연쇄 단계에 블럭이 터진 이후 중력에 의해 블럭이 아래로 내려감 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124// BOJ 11559 Puyo Pu..
문제링크 : https://boj.kr/6359 DP 문제라고 한다.왜 DP 문제인지는 잘 모르겠지만 DP로 풀지 않으면 정말 쉽게 풀린다. N이 5라고 가정하고 시뮬레이션을 해보자.0은 문이 닫힌 상태를 1은 문이 열린 상태를 의미한다. 맨 처음0 0 0 0 0 1라운드1 1 1 1 1 2라운드1 0 1 0 1 3라운드1 0 0 0 1 4라운드1 0 0 1 1 5라운드1 0 0 1 0 이쯤 하면 규칙을 찾을 수 있다.각 라운드에 해당하는 숫자만큼의 배수를 찾아서 1 → 0 / 0 → 1 으로 바꿔주면 된다. 12345678910111213141516171819202122232425262728// BOJ 6359 만취한 상범#include #include using namespace std; int ma..
문제링크 : https://boj.kr/1010 이 문제는 M개의 사이트에 N개의 다리를 놓는 가지수를 구하면 되는 문제로 조합을 이용하여 풀었다.MCN = M! / ((M-N)! * N!) 을 구현하면 된다.6C4를 구하는 경우 (6*5*4*3*2*1) / ( (2*1) * (4*3*2*1) ) 인데 (4*3*2*1)에 해당하는 N!이 약분되어 (6*5) / (2*1)인 것을 중학교때 많이 배웠을 것이다. (M-N)!과 N! 중에서 더 많은 숫자를 제거할 수 있는 값을 고르면 되고 이를 그대로 식으로 표현하면 된다. 123456789101112131415161718192021222324252627282930// BOJ 1010 다리 놓기#include using namespace std; int mai..
문제링크 : https://boj.kr/1929 BOJ 2581 소수 문제랑 완전 동일한 문제라고 할 수 있다.소수는 어떤 수 N의 약수가 1과 자기 자신만 가지는 숫자를 의미한다.소수를 구하는 것은 정말 어렵지만 '판별'은 가능하다.자기 자신보다 작은 정수 중에서 약수가 존재하는지를 2~N까지 반복하면 된다.하지만, 약수는 N의 제곱근 보다 큰 숫자는 절대로 나올 수 없다. N의 제곱근 보다 큰 정수에 어떤 정수를 곱하면 이미 N보다 커지기 때문이다. 따라서 N의 제곱근 범위까지만 구하면 된다.하지만 이 방법은 소수를 판별하는 방법이지 소수를 구하는 방법이 아니다.어떤 범위의 숫자가 주어졌을때 소수인지 아닌지를 판별하려면 1~N의 제곱근 까지 계산해야 하는데 이 것을 주어진 범위만큼 반복해야 하기 때문..