728x90
반응형

알고리즘 258

백준, BOJ, 10825번, 국영수 : C++ [CPP] ★

어렵지 않다. 그냥 풀면되는데.. Compare 함수에 익숙하지 않다면 어려울 수도 있다. https://www.acmicpc.net/problem/10825 #맞은 풀이 #include using namespace std; //구조체 struct Student{ string name; int korean; int english; int math; }; //구조체 벡터 vector vec; int N; //감소하는 순 (참조자로 받는다 -> 시간 단축) bool comp(const Student &stA, const Student &stB){ //가장 밑에 첫번째 기준을 써놓고 if(stA.korean == stB.korean){ if(stA.english == stB.english){ if(stA.ma..

백준, BOJ, 1759번, 암호만들기 : C++ [CPP] ★★★★

//첫번째 풀이 2021.12.05 //두번째 풀이 2022.02.08 어렵다기보다는.. 조건이 많은 문제였다. https://www.acmicpc.net/problem/1759 #맞은 풀이 #include #include #include using namespace std; int L, C; vector vec; bool isUsed[15]; //L,C는 글로벌, 백트래킹함수 -> 차례대로 고름 void func(int cnt, string s) { //L개 골랐다면 출력할지 정함 -> 자음 2개 모음 1개 if (cnt == L) { int consonant = 0; int vowel = 0; for (int i = 0; i < L; i++) { if (s[i] == 'a' || s[i] == 'e'..

백준, BOJ, 1182번 C++ [CPP] ★★

//첫번째 풀이 2021.05.26 //두번째 풀이 2022.02.08 이 문제도 백트래킹이지만 조금 꼬아서 냈다. 출력을 조금 더 어렵게했다. https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 우선 내가 접근했던 틀린 풀이부터 보자 #include #include using namespace std; void init() { ios::sync_with_stdio(0); cin.tie(0); } int a, b..

백준, BOJ, 14888번, 연산자 끼워넣기 C++ [CPP]

//첫번째 풀이 2021.06.07 //두번째 풀이 2022.02.08 //세번째 풀이 2022.06.13 얘도 모든 걸 다 뒤져봐야 하는 문제다. 다만 모든 걸 뒤질 때 어떻게 뒤지느냐가 문제다. 백트래킹, DFS를 사용했다고 보면 된다. https://www.acmicpc.net/submit/14888/29858716 #맞는 풀이 #include #include #define MAX 1000000000 using namespace std; int N; int num[12]; int oper[4]; // {add, sub, mul, div 순} //최대 최소 int m = MAX; int M = -MAX; //백트래킹 이용같다. //입력은 현재까지의 연산결과를 받고 사용한 연산자 개수도 입력받는다 vo..

백준, BOJ, 9019번, DSLR : C++ [CPP]

이런 문제를 싫어하지만.. 자주 나오는듯 하다. 내용이 많아서 어려운 문제다. 게다가 6초나 준다.. 시간이 얼마나 많이 걸릴 지 예상이 가는 문제다. https://www.acmicpc.net/problem/9019 #맞은 풀이 #include using namespace std; const int MAX = 10000; int A,B; bool visited[MAX]; int main(){ int T; cin >> T; //테케 while(T--){ cin >> A >> B; //초기화 for(int i = 0; i

백준, BOJ, 13549번, 숨바꼭질 3 : C++ [CPP]

음.. 처음 생각하기 정말 어려웠다. 어떻게 BFS로 푼다는 거지..? BFS는 모든 단계 탐색이 비용이 같아야하는데.. 쟤는 0초인데?? 우선순위 큐를 쓰라는 말을 들어도 못알아듣다가 다른 분의 코드를 조금 보고나서야 알았다. https://www.acmicpc.net/problem/13549 #맞은 풀이 #include using namespace std; int N, K; bool visited[100002]; int main(){ cin >> N >> K; //왜 우선순위 큐를 사용해야하느냐?? //+1,-1의 노드를 탐색하는 것과 *2 노드를 탐색하는 것은 다르다. //즉, *2를 하는 것은 할 수 있는 만큼 하고 +1과 -1을 해야한다. //즉, 단계도 단계지만 시간으로 구분되어야 한다. //..

그래프 탐색(BFS, DFS)에 대한 알고리즘 문제풀이

우리가 BFS나 DFS를 사용하는 것은 알아봤다. 응용이 어떻게 될 수 있으며어떤 개념을 알고 가야하는지 고찰해보자. (대부분 BFS를 요구하고 DFS는 재귀를 이용하는 문제가 많다) 우리는 그렇다면 어떤 문제가 DFS고 BFS인지 알 수 있어야 한다. 이 문제를 보자 [프로그래밍언어(Programming Language)/C || C++] - 백준, BOJ, 1926번 C++ [CPP] 딱히 BFS인지는 모르겠으나 BFS로 해도 될 것 같은 느낌이 든다. 다음 문제를 보자 [프로그래밍언어(Programming Language)/C || C++] - 백준, BOJ, 2178번 C++ [CPP] 최소의 칸 수를 구하란다. 즉, 탈출까지 최단거리를 구하란다. 그래서 BFS를 쓴다. 솔루션을 찾았을 때 BFS..

프로그래머스,JadenCase 문자열 만들기: C++ [CPP] ★★

toupper와 tolower를 알고 있다면 쉽게 풀 수 있는 문제였다. 어렵지 않았고 논리적으로만 생각하면 되었다. https://programmers.co.kr/learn/courses/30/lessons/12951 #맞은 풀이 #include using namespace std; string solution(string s) { //check가 true인 상태일 때(공백 다음에 나오는 문자) int i = 0; //true로 시작해야 맨 처음 단어에 대응 가능. bool check = true; while(s[i]){ //공백일 경우 flag하고 넘어감 if(s[i] == ' '){ check = true; i++; continue; }else{ //공백이 아닌 문자를 만났을 경우 //1.첫번째 문..

프로그래머스, 짝지어 제거하기: C++ [CPP] ★★★★

스택을 아는데도 문제를 보면 막상 생각이 안난다. 스택의 문제를 생각해보면 스택은 바로 이전의 것과 비교하는 것이 많이 나온다. 이 문제도 마찬가지였다. https://programmers.co.kr/learn/courses/30/lessons/12973 #맞은 풀이 #include #include #include using namespace std; int solution(string s) { int answer = -1; //문자의 개수가 홀수라면 모두 없앨 수 없음 if(s.size()%2 == 1) return 0; stack stk; for(char x : s){ if(stk.empty()){ stk.push(x); }else{ if(stk.top() == x) stk.pop(); else st..

백준, BOJ, 16472번, 고냥이: C++ [CPP] ★★★★

투 포인터 좋은 예라고 볼 수 있다. 여기서 R의 예외조건에 대해서 알아야하는데 내가 짠 알고리즘에서는 R이 커져버려서 while문에 다시 못들어가는데 있었다. https://www.acmicpc.net/problem/16472 #맞은 풀이 #include using namespace std; int N; string s; map kind; int ans = 0; // 최대 구간 길이 int main() { ios::sync_with_stdio(0); cin.tie(0); cin>>N; cin>>s; int num = 0; // 종류 int L = 0; int R = 0; if(s.size()

728x90
반응형