728x90
반응형

문제풀이(Problem Solving) 326

백준, BOJ, 1525번, 퍼즐 C++ [CPP] ★★★★★

나의 좁은 식견에 안타까워하며 배운 상태 저장방법!! 행렬을 문자열로 문자열을 행렬로 변환하는 방법!! 행렬 자체를 저장하는 것이 메모리가 많이드므로 문자열로 저장하는 방법!!! 배울 것이 많은 문제다. https://www.acmicpc.net/problem/1525 #맞은 풀이 #include using namespace std; int dc[4] = {1,-1,0,0}; int dr[4] = {0,0,1,-1}; string start = ""; //상태를 문자열로 저장함 int answer = -1; //answer가 갱신되지 않는 것은 아무리 시도해도 만들 수 없는 것을 의미 int main(){ queue q; //string(상태), int(실행횟수) set check; //상태가 중복되는 ..

백준, BOJ, 21921번, 블로그 C++ [CPP] ★★

흥미로운 문제다. 실제로 최근 1달 이내... 최근 1년 이내.. 최근 5년 이내.. 를 가진 모든 데이터들을 이렇게 다룰 것만 같다. 그만큼 중요하지만 쉬운 문제라고 본다. 큐를 이용한다. https://www.acmicpc.net/problem/21921 #맞는 풀이 #include using namespace std; int N, X; int main(){ cin >> N >> X; queue q; int cnt = 0; int sum = 0; unordered_map number; int M = 0; while(N--){ int visit; cin >> visit; sum += visit; q.push(visit); cnt++; if(cnt>=X){ M = max(M,sum); number[sum..

LeetCode, 1920. Build Array from Permutation C++ [CPP]

릿코드에서 영어에 익숙해지기로 하였다. https://leetcode.com/problems/build-array-from-permutation/ 풀이는 어렵지 않았다. 영어가 어려울뿐 zero-based permutation 이란 0부터 시작하는 숫자에 대한 순열이 주어졌다는 말이다. ** 길이가 n이면 0부터 n-1 숫자의 순열을 말한다. 우리는 주어진 순열과 같은 길이 그리고 nums[nums[i]]를 만족하는 원소를 가지도록 ans[i]를 구성하여 그 ans를 반환하기를 원한다. #풀이 class Solution { public: vector buildArray(vector& nums) { vector vec; for(int i = 0; i

백준, BOJ, 2346번, 풍선 터뜨리기 C++ [CPP] ★★★★★

큐 같지만 덱인 문제다. (원형큐 문제다) 꽤 생각해볼만한 문제다. 왜냐면 front가 항상 앞을 가리키고 있다고 생각하면 역방향 회전과 정방향 회전의 느낌이 조금 다른 느낌이라서 그렇다. 메모리 제한이 있기 때문에 잘 해야한다. 하나로 묶을 수 있는 것은 하나로 묶어야한다. https://www.acmicpc.net/problem/2346 #내 풀이 #include using namespace std; int N; //메모리 제한 4MB //int 1개 4바이트.. 256개면 1KB, 256*1024개면 1MB..? int main(){ cin >> N; deque balloon; for(int i = 1; i> x; balloon.push_back({i,x}); //1~N번 } while(!ballo..

백준, BOJ, 2589번, 보물섬 : C++ [CPP] ★★

조금 특이한 BFS랄까..? 최장거리의 최단시간을 구해야 한다. ???? 처음에는 이해가 안갔다. https://www.acmicpc.net/problem/2589 #맞는 풀이 #include using namespace std; int row, col; //행, 열 char arr[50][50]; //입력 int visited[50][50]; //방문여부 -1로 초기화 int memo[50][50]; // 기억 int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; int main(){ cin >> row >> col; //문자열로 입력받음. for(int i = 0; i> s; //visited -1 초기화 for(int j = 0; j

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

728x90
반응형