[백준]/C++

· [백준]/C++
https://www.acmicpc.net/problem/1522  #문제 간단 정리슬라이딩 윈도우/ 투포인터 #문제 해결 방법 중요한건 a의 개수만큼 윈도우를 만들어서윈도우 안에 담긴 b 만큼 교체를 해주는 숫자가 최소가 되는 때를 찾는 것이다. a의 개수만큼의 윈도우를 찾는다는 발상이 조금 어려울 수도 있을 것 같다. #전체 코드#include #include #include #include #include using namespace std;int main() { string s; cin >> s; int n = s.length(); int aCount = 0; int bCount = 0; int minBCount = INT_MAX; for (char c..
· [백준]/C++
#문제 해결 방법 가장 중요한 생각은S ->T로 가는건 가지수가 많기 때문에 시간초과가 나기 매우매우 쉽다는것이다.혹시 하더라도 일치하는지 확인하는 조건때문에 kmp 가 필요할지도 모르겟다. 때문에 T->S 로 가는 것은 매우 가지수가 적다.왜냐면 뒤에 A가 있다면 A를 추가한것이기 때문에 빼주고B가 잇다면 B를 뒤집고 추가해준거라 빼고 뒤집어 주면된다 이 힌트를 알 수 있는것은바로 추가하는 방향이 한쪽으로만 이뤄진다는 것이다. 만약 양방향으로 추가가 되었다면 불가능했을 것이다. #전체 코드#include #include #include #include using namespace std;int main() { string s,t; cin >> s >> t; while (true) { ..
· [백준]/C++
https://www.acmicpc.net/problem/31926    #문제 해결 방법 우선 재일 달디달고를 입력하는데는 8회가 걸린다.그 이후에 달디달고를 연속해서 입력했을때4개를 만들어야 된다면 2개를 만들고 2개를 복사 할 수 잇다.8개를 만들어야 된다면 4개를 만들고 복사할 수 있다. 즉 남은 달디달고가 현재 만든 달디달고 의 배수보다 많이 남았다면 1초가 걸리게 된다. 마지막의 달디단은 +1초로 결정해 주면 된다.왜냐하면 daldida 까지 2의 배수를 복사해오면서 같이 복사해오면 되기 때문이다 그이후에 n 붙이는데 +1초로 이걸 만들어 주면 된다.  #전체 코드#include #include using namespace std;int main() { int n; cin >..
· [백준]/C++
https://www.acmicpc.net/problem/8972   #문제 간단 정리시뮬레이션 문제..천천히 구현을 하자 #문제 해결 방법 1.종수가 움직임    -> 만약 움직일 위치에 로봇이있다면 이동횟수 출력하고 종료2. 로봇이 움직임    -> 8개의 방향에 대해서 가장 종수랑 가까워 지는 방향을 계산    -> 2차원배열에 로봇들의 개수를 입력    ->2개이상이면  '.'으로 1개라면 'R'로 맵에 입력 0개라면 로봇이 없으니 '.'로 입력 #전체 코드#include #include #include #include using namespace std;int dx[9] = { -1, 0, 1, -1, 0, 1, -1, 0, 1 };int dy[9] = { 1, 1, 1, 0, 0, 0, -1,..
· [백준]/C++
https://www.acmicpc.net/problem/2638  #문제 해결 방법 친절하게도 가장자리에는 치즈가 놓이지 않는다고 했으니외곽부터 외부공기를 탐색하고 난 후 남은 공기는내부 공기로 취급하면 된다. 나는 외부 공기를 그냥 bool 배열을 사용해서 따로 표시했다.기존의 맵이랑 같이 표시하는 방법이 더 효율이 좋을 듯 한데 그냥 더 직관적인 방법을 사용했다. 1.외부공기를 확인한 후에2. 외부공기 2개가 맞닿은 치즈 확인 -> 지우기        findOx(0, 0);        cheeseCheck();를 반복하고 치즈가 0이 될때 까지 반복된 순서를 출력 하면 된다. #전체 코드#include #include using namespace std;int dx[4] = { -1,0,1,0 ..
· [백준]/C++
https://www.acmicpc.net/problem/10703 #문제 간단 정리   //만약 가장 낮은 위치에 있는 유성과    //그 열에 가장 낮은 위치의 유성 - 가장 높은 위치에 있는 땅    //그 값들의 최소값 만큼 내려 올 수 있다. #문제 해결 방법 전반적으로 구현 문제기 때문에 위와 같이 해결 할 수 있는데 반례를 잘 찾아야 될 것 같다. 일단 주어진 테스트케이스에서는 무조건 땅이 존재 하는것 같다.그래서 땅이 없는 경우에는 테스트케이스가 존재  하지 않는 것 같고  땅이 있는부분과 없는 부분이 나눠진 테스트케이스가 존재하는 것 같은데이 경우에는 땅이 있는 곳의 유성과의 차이만큼 내려주도록 구현을 해야 된다. 만약 전부 땅이 없는 경우에는 내 코드는 오류가나는데이는 상정 안된 부분인..
· [백준]/C++
https://www.acmicpc.net/problem/1456    #문제 해결 방법 우선 문제를 살펴 봤을 때 소수를 에라토스테네스의 체로 구한다는 생각은 쉽게 할 수 있다. 그리고 거의 소수를 (소수의 n제곱) 을 구하는건딱히 추가적으로 빠른 방법이 없다 생각이 되어서브루트 포스로 풀어야 겠다는 생각이 먼저 든다.  그래서 에라토스테네스로 루트 b 까지의 소수를 구하는데이유는거의 소수는 소수의 n 제곱이라루트 b 이상의 소수는 필요 없기 때문이다    ll limit = sqrt(b) + 1;     vector is_prime(limit + 1, true);     vector primes; 그리고 구한 소수들을 계속 제곱해 가면서 b를 넘지 않고a 보다 크다면 거의소수를 찾은 것이다.     ..
· [백준]/C++
https://www.acmicpc.net/problem/30677   #해결 방법 일단 그냥 구현 그자체인데 소수점 처리에서 아주 귀찮다. 입력값의 소수점을 지우기 위해서              long long combo_bonus = 100 + combo * C;             long long skill_bonus = 100 + skill[idx] * s[idx]; 각각 100을 곱해준 상태로 처리하고10'000을 나눠주고소수점 내림을해서 처리하도록하자 즉 소수가 나올거같을때는 곱해서 소수점을 없애고 나중에 나눠서 오차를 줄이도록하자 #전체 코드#include #include #include using namespace std;int main() { int N, K, C, R; ..
· [백준]/C++
https://www.acmicpc.net/problem/1213#include #include #include #include using namespace std;int alpha[26];int main() { string s; cin >> s; int odd = 0; char oddChar; // 알파벳 개수 세기 for (char c : s) { alpha[c - 'A']++; } // 홀수 개수 세기 for (int i = 0; i 1) { cout
· [백준]/C++
https://www.acmicpc.net/problem/31718  #문제 해결 방법 2를 곱해서 같은수가 된다는거는 2로 계속해서 나눳을때같은 값이 된다는 소리니.. 2로 계속 나눠서 같은 값인지 확인해서 개수를 세어주면 된다 #전체 코드 #include #include #include #include typedef long long ll;using namespace std;int divide(int factor) { if (factor % 2 == 1) { return factor; } else { return divide(factor / 2); }}int main() { int n; cin >> n; map map; in..
경우42
'[백준]/C++' 카테고리의 글 목록 (7 Page)