본문 바로가기

전체 글

[코드포스 Practice13] B. SwapSort 그냥 바꾸기만 하면 되나?? 되나?? 된다. 이게 다라고?? 이생각 들어서 두번 읽어봤음 음.. 저거 바꾸는 거 더 좋은 방법이 있을 것 같은데 난 이게 최선이었다. 게다가 시간복잡도 내에 돌아가서 그냥 이 방법대로 짰다. #include #include #include #include #include #include using namespace std; using i64 = long long; using ii = pair; int main() { int n, m; scanf("%d", &n); vector v(n); for(int i = 0; i < n; i++) scanf("%lld", &v[i]); int ans = 0; vector vij(n); for(int i = 0; i < n - 1; i+.. 더보기
[코드포스 Practice13] A. Kuriyama Mirai's Stones 문제 풀 때 저게 너무 궁금했다. 문제랑 상관없을 것 같아서 바로 패스하고 코딩했는데 지금은 시간 많으니 걍 친구한테 물어봤다. 불쾌하다? 그런거라는데 음.. 그렇구나 이거 딱 보자마자 그 부분합이었나? 그거 떠올랐다. 부분합? 음 명칭이 이게 맞군 합을 구해놓으면 밑의 m개의 쿼리에서 그대로 갖다쓰기만 하면 끝~~ 질문이 2개라 문제 따라 배열을 2개 만들어줬다. 하나는 그냥 배열 하나는 정렬한 배열 #include #include #include #include #include #include using namespace std; using i64 = long long; int main() { int n, m; scanf("%d", &n); vector v1(n + 1, 0); vector v2(n .. 더보기
[코드포스 Practice13] 후기 A와 B를 풀었다! B 풀면서 혹시 이거 난이도 낮아진 건 아닐까 싶었다ㅋㅋ 쉬운문제 걸린 것 같음. A한 20분정도 풀다가 제출했는데 틀려서 좀 고민하다 long long 안 써준 거 생각났음. 그래서 오래 안 걸리고 바로 수정해서 제출했다. 이상한 꼼수가 생겼는데 보통 코포에서 예제 케이스 다음으로 바로 가장 큰 값 넣어서 터뜨려본다. 그래서 3-4번에서 틀렸으면 그건 오버플로우 때문에 터진겨,,, 그 외 B는 30분 정도 푼 것 같고.. C는 문제보고 뭐지 싶었는데 이해하고 나서도 어떻게 풀지 몰라서 패스.. 나머지 시간동안 D만 잡고 있었다. D 헤매다가 10분 정도 남았을 때 감 잡혀서ㅋㅋ 코드 짜다가 끝났다. 그래도 나름 만족함,, A, B success 뜬 것 보고 눈물났음 ㅠ__ㅠ 예아~ .. 더보기
[코드포스 Practice12] D. White Sheet 전에 색종이로 덮는 문제 푼 적 있었는데.. 있었지... 그 때는 색종이 만큼의 배열을 만들어서 덮은 수를 1로 바꿔가며 확인했었는데 이번에는 범위가 너무 커서 그렇게 못했다. 그래서 덮는 조건을 확인해가면서 몇 가지 유형으로 나눴다. 조건은 세 가지로 나눌 수 있다. 첫번째는 다 덮는거 두번째는 깔끔히 직사각형으로 덮는 거 그 외는 나머지 경우 조건은 다음 검은 종이를 얼마만큼 확인해야할지 기준으로 나눴다. 첫번째 경우는 다음 검은 종이를 확인할 필요가 없다. 그래서 그냥 NO를 출력하고 종료 그 외 경우는 어쩔 수 없이 다음 종이로 다 덮히는지 판단... 두번째 경우는 다 덮히는 지 확인하는 건 같지만 흰 종이의 범위를 줄일 수 있다. ~~나머지는 집 가서~~ #include #include #inc.. 더보기
[코드포스 Practice12] C. Given Length and Sum of Digits... -1 -1 안 되는 거 제외하기 그 후 되는 거 생각해보기 앞에서 부터 - 뒤에서 부터 힌트 받았당 최소 최대 전부 다 손코딩 했는데 북님이 더 깔끔한 코드를 알려주셨다. push_back() 최대랑 최소 그냥 역순 아닌가? 생각 들었는데 다른 점이 있어서 따로 짰다. 그런데 이거 조금 더 생각해보면 최소는 맨 첫자리가 1이어야 하므로 s-1을 구한 다음 첫번째 자리에 1을 더해주면 끝난다ㅋㅋ 짱신기함 #include #include using namespace std; int main() { int m, s; int start, end; scanf("%d %d", &m, &s); vector min_ans(m, 0); vector max_ans(m, 0); if (m == 1 && s == 0) { p.. 더보기
[코드포스 Practice12] B. New Year and Buggy Bot 코포 시간 내에 못 풀고 끝나고 다시 풀었다 이 문제를 복잡하게 생각해서 백트래킹을 써야하나??? 생각했는데 시간복잡도를 계산해보니 얼마 안 된다. 그래서 완전탐색으로 풀었다. 알고리즘까지는 바로 구현했는데 udlr 4!번 비교하는 데서 문제였다. 4! 섞어서 비교하는데?? 이거랑 mv 문자열이랑 비교를 어떻게 하지?? 싶었지만 어찌저찌 해결했다. #include #include #include #include using namespace std; int main() { int n, m; int s_i, s_j; cin >> n >> m; vector arr(n); string mv; string udlr = "0123"; int ans = 0; //input sort(udlr.begin(), udlr... 더보기
[코드포스 Practice12] A. k-rounding int count_num(i64 n, int div) { int count; count = 0; while (n > 0 && n % div == 0) { count++; n /= div; } return (count); } int main() { i64 n; int k; scanf("%lld %d", &n, &k); if (k == 0) { printf("%lld", n); return (0); } int a = count_num(n, 5); int b = count_num(n, 2); //cout 더보기
[코드포스 Practice12] 후기 11? 넘겨버렸다. 빨리 12 풀고싶었다. 아무튼.. 오랜만에 풀었는데 재밌었다. 한달동안 c언어로만 코딩했는데 갑자기 c++ 쓰려니 이차원 벡터 만드는 법도 까먹고 문자열 어떻게 했는지 까먹고.. 첫 문제 5트 정도 했는데 이유가 %lld로 안 적고 %ld로 적어서.. 내가 짰을 때는 잘 돌아가서 더 못 찾았다ㅋㅋ 맞왜틀 거리다 어이없어서 캡쳐도 해놨었다. 이번에는 어떻게 풀었는지 기억은 잘 안 나는데 A 25분 정도만에 풀고 틀려서 B로 넘어갔다. B는 문제 읽고 오래걸리겠다 싶어서 C로 넘어갔는데 C는 풀 수 없을 것 같아서 다시 A로 넘어와서 해결하고 남은 시간에는 B잡다가 끝난 듯. 빨리 풀이나 적어야지 더보기