일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OS
- 백준
- 코딩
- c++
- coding
- Operating System
- 자료구조
- 오에스
- 컴공과
- cs
- 컴공
- 문제풀이
- 알고리즘
- 코테
- vector
- bfs
- 정석
- Stack
- 북리뷰
- 그래프
- DP
- 개발
- 스택
- 정석학술정보관
- 오퍼레이팅시스템
- 브루트포스
- 너비우선탐색
- 구현
- 컴퓨터공학과
- Computer science
- Today
- Total
목록알고리즘 (164)
Little Jay
C++ Array 연습 기초 첫 번째는 무지성 string으로 푸는 방법이다. O(n^2)로 간단하게 풀 수 있는 문제이다. 처음 for문은 char 알파벳이 돈다 이제 다음 for문은 입력된 string 안에있는 char과 처음 for문의 알페벳이 몇개나 일치하는지 확인한다. #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); string s; cin >> s; for (char i = 'a'; i
간단한 파스칼 삼각형 구하는 문제 #include #include using namespace std; int bridges[31][31]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); for (int i = 1; i t; while (t--) { int n, m; cin >> n >> m; cout
Mooyo Mooyo == 뿌요뿌요....? 문제가 영어라 해석이 들어가야 한다. 문제를 잠시 분석을 한다면, n X 10의 줄을 입력을 받아서 뿌요뿌요 게임을 실행시켜주면 된다. 먼저 같은 숫자가 k개 이상 연결 되어 있다면 0으로 만들어준다. 이 과정을 dfs로 탐색하고 바꿔준다. 그 후에 중력의 영향을 받아 아래로 블럭들을 아래로 당겨주어야 한다. 아래로 다 당겨주었다면 계속해서 블럭들을 터뜨리고.... 이 과정을 계속 반복해주면 된다. 범위 잘못 설정해서 여러번 틀렸다..... 그래프 문제는 진짜 한 시간 이상 걸려서 푸는데 코딩좀 잘 하고 싶어요ㅠㅠ #include #include using namespace std; int n, k; char table[100][10]; bool visited..
생각보다 엄청 더러웠던(?) 문제였다. 역시 브루트포스는 항상 그렇고 그렇다...... CCTV 구조체를 하나 만들어서 CCTV 종류(몇번인지), 몇열, 몇행에 저장되어있는지에 대한 정보를 저장하고 rotation이라는 정수 배열에서 회전 가능한 범위를 넣어주었다. 디버깅을 하면 이제 input 하고 dfs로 탐색이 들어가는데, 이제 중요한점은 백트랙킹을 해야한다는 것이다. 이 문제의 핵심인 부분이다. 예를 들어서 01000 00000 00000 00000 00000 이런 cctv가 있으면, 얘는 아래쪽으로 탐색을 해야 하는 것이다 그래서 이 부분에 대해서 각각의 경우에 대해서 백트랙킹을 해주면 된다. #include #define MAX 8 using namespace std; struct CCTV {..
string을 잘 인덱싱하면 되는 문제 #include #include using namespace std; int main() { string s; cin >> s; int alphabet = 0; for (int i = 0; i < s.size(); i++) { if (s[i] == 'c') { if (s[i + 1] == '=') { i++; alphabet++; } else if (s[i + 1] == '-') { i++; alphabet++; } else alphabet++; } else if (s[i] == 'd') { if (s[i + 1] == '-') { i++; alphabet++; } else if (s[i + 1] == 'z' && s[i + 2] == '=') { i += 2; a..
1~99까지의 숫자는 모두 한수 이다. 등차수열을 생각하면 원소를 더하는 경우와 빼는 경우, 공차가 0인 경우 모두 생각하자 #include #include using namespace std; int calc(int n) { int count = 0; int first, second, third; if (n n; cout
생각보다 생각을 많이 해야했던 문제이다. 코테는 항상 문제를 잘 분석하는 것에서부터 시작한다. 1. 항상 문제를 잘 읽어야 한다 문제에 낚시가 있었는데, 그것을 긴급번호로 쓰여진 것이었다. 그러니까 당연히 긴급번호가 처음으로 들어오고 그 번호를 기준으로 substr을 하면 되는줄 알고 계속 틀렸었다. 그러나 문제는 긴급번호가 기준이 아닌 모든 전화번호를 기준으로 문제를 풀어야한다 ex) 11240 48298405824 113 113134 NO 즉, 첫 번째에 상관없이 어떤 전화번호가 다른 전화번호의 전화번호가 되면 안된다는 것이다. 2. 빠른 탐색을 위해 sort를 통해서 vector를 정렬시키고, length를 비교해서 current가 next보다 길면 넘겨버렸다 접두사라는 개념을 생각하면, curre..
#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int number, result; int x, y, z, w; int count = 0; cin >> number; result = number; while (true) { x = number / 10; y = number % 10; z = (x + y) % 10; w = (y * 10) + z; number = w; count++; if (w == result) break; } cout
#include using namespace std; int main() { long long n; long long sum = 0; long long count = 1; cin >> n; while (true) { sum += count; if (sum > n) { count--; break; } ++count; } cout
이진탐색을 활용하는 문제 생각보다 이진탐색할때 조건을 설정하는 부분이 어려웠다 #include #include #include using namespace std; long long arr[10001]; int main() { int n, sum = 0; cin >> n; for (int i = 0; i > arr[i]; sum += arr[i]; } int budget; cin >> budget; sort(arr, arr + n); long long low = 0; long long high = arr[n - 1]; if (sum