728x90
반응형

C++ 193

백준, 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..

포인터, 참조자(Pointer, Reference) C / C++

물론 참조변수에서 이미 알아봤지만 포인터와 함께 알아보겠다. 포인터와 참조자는 비슷한 맥락에서 쓰이지만 조금 다르다. -> 포인터와 참조자의 다른점을 정확히 설명할 수 있다면 정말 아는 것. 여기서 짧게 설명하자면 참조자는 한 번 참조되어 정의되면 다른 객체를 참조할 수 없어서 항상 그 참조자와 처음 결합한 객체만 참조한다. 포인터에 대입하면 참조자가 아닌 다른 변수처럼 포인터 자체에 새로운 값이 대입된다. 즉, 다른 객체를 가리킬 수 있다. [C || C++ 문법/함수] - C++문법/ 참조 변수, reference + 참조의 특성 알아보자 우선 먼저 포인터에 대해서 한마디 설명해보자. 포인터는 어떠한 변수를 가리키는 변수다. ?? 엥 변수를 가리키는 변수?? 우선 변수는 말했듯이 변할 수 있는 데이터..

Variable, 변수란, C/C++

기초부터 탄탄히 하기 위해서 다시 복습하도록 한다. 한 마디로 말할 수 없으면 공부한 것이 아니라는 말을 듣고 다시 한 마디로 정의해보자 변수란? 데이터를 저장할 수 있는 메모리의 공간 이라고 생각한다. 해당 변수는 주소 값을 가지고 있고 주소 값으로 접근이 가능하다. 정의했으니 이제 더 자세히 알아보자. 메모리는 접근 시에 주소로 접근이 가능한데 컴퓨터의 운영체제나 구조에 따라 달라지지만 우리는 32bit의 주소 또는 64bit의 주소를 가지고 있다. (32 bit라고 하자.) 우리는 이 주소에 접근하여 데이터를 메모리에 저장한다. 하지만 우리가 주소를 직접 써서 데이터를 관리했다면 정말 비효율의 끝판왕이었을 것이다. 우리는 조금 더 효율적인 방법인 변수를 써서 데이터를 관리하기로 했다. (물론 내부적..

백준, 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()

백준, BOJ, 2470번, 두 용액: C++ [CPP] ★★★

어렵지 않지만 예외가 있었다. 바로.. 같은 용액이 쓰이면 안된다는 것이었다. 처음에 나는 두번째 가까운 원소까지 찾을 생각은 안했었다. 하지만 모든 것이 알칼리성이나 산성으로 되었을 때는.. 두 번째로 가까운 원소가 필요해졌다. https://www.acmicpc.net/problem/2470 #맞은 풀이 #include using namespace std; //두 용액 더한 값 범위 int로 가능 int N; int liq[100000]; vector ans; //해당 액체의 숫자에 (-1) 곱한 것과 가장 가까운 원소를 찾아야함 //즉, x와 일치하거나 가장 가까운 원소를 return함. int bisearch(int input){ int x = -input; //우리가 찾아야하는 값. int l ..

백준, BOJ, 1039번, 교환: C++ [CPP] ★★★

이것도 아주 중요한 문제라고 할 수 있다. 중복되는 값을 어떻게 골라내느냐이다. https://www.acmicpc.net/problem/1039 #맞은 풀이 #include #include #include #include using namespace std; int N, M, K; int ans; set check[11]; //★★★★★★★ void func(string s, int cnt) { string after = s; int x = stoi(s); //string으로 받은 숫자. //K번 바꿨을 때. if (cnt == K) { ans = max(x, ans); return; } //바꿀 수 있는 모든 경우의수 확인 for (int i = 0; i < M - 1; i++) { for (int ..

백준, BOJ, 2580번, 스도쿠 : C++ [CPP] ★★

백트래킹에서 그래도 조건이 많이 붙어서 가지치기를 어떻게 하는지 공부할 만한 문제다. 행과 열 처리는 어떻게든 가능하지만 3*3이 어느 칸인지 찾는 것을 조금 고민해볼 필요는 있다. 결국 1~3까지 첫 째 4~6까지 두 번째.. 이렇게 생각하면 어떻게 할 지 감이 온다. https://www.acmicpc.net/problem/2580 #맞은 풀이 #include #include using namespace std; int pane[9][9]; // 9*9 게임판 bool check = false; // 답을 찾았는지 체크 vector vec; // 채워야 할 곳의 좌표 int number = 0; // 채워야 할 곳의 개수 //조건 1.가로의 합 45, 2.세로의 합 45, 3.3*3 내의 합 45 를..

728x90
반응형