코드포스 썸네일형 리스트형 [코드포스 Practice16] E. Squares and not squares #include #include #include #include #include #include #include #include #include #include #include using namespace std; using i64 = long long; int main() { int n; scanf("%d", &n); vector v(n); int s_num = 0, ns_num = 0, zero = 0; vector ns_idx; for (int i = 0; i < n; i++) { scanf("%lld", &v[i]); int tmp = (int)sqrt(v[i]); if (tmp * tmp == v[i]) s_num++; else { ns_num++; ns_idx.push_back(i); } if.. 더보기 [코드포스 Practice16] D. Yet Another Walking Robot 이렇게 풀었는데 틀렸다ㅋㅋㅋ 내가 착각 했던 게 있었는데 난 중간에 종점이 겹치면 지워도 된다고 생각했다. 근데 알고보니 중간에 한바퀴 도는 경우도 있었다. 그래서 다시 코딩함... 하지만 시간 복잡도가 n^2이라 터졌다ㅋㅋㅋ 그래서 힌트 받아서 다시 구현했다. 역좌표.. 신기하다.. 그리고 map.. 어렵다 #include #include #include #include #include #include #include #include #include #include using namespace std; using i64 = long long; int main() { int t; scanf("%d", &t); for (int i = 0; i >.. 더보기 [코드포스 Practice15] E. Crazy Town E번 혼자서는 못 풀었을 문제였음ㅋㅋㅋ 아이디어 쓰는 문제였는데 풀이가 진짜 신기하다. 이 문제는 점 A에서 B로 갈 때 몇 개의 직선을 건너냐는 문제다. 나는 이걸 막 교점을 구해서 그 교점과 A를 비교한 다음 하나씩 계산해야겠다고 생각했는데 더 쉽고 빠른 방법이 있었음. 직선을 건너는 경우를 생각해보면 어느 한 점은 직선 위에, 한 점은 직선 아래에 있어야 한다. 그래서 직선을 기준으로 점이 위, 아래에 있는지 계산한 다음 서로 다른 위치에 있는 경우 개수를 센다. #include #include #include #include #include #include #include #include #include using namespace std; using i64 = long long; int main.. 더보기 [코드포스 Practice16] C. Strongly Connected City 아니! 이게 무슨 문제람! 머람! 코드포스 문제 인간적으로 내라 좀! 막 고민하다가 처음에는 규칙이 있나 싶어서 이렇게 빙글빙글 돌게끔 만들어야 하는 줄 알았다. 하지만 아무리 생각해서 근거없고 규칙도 잘 모르겠고 해서 직접 경로를 다 찾아서 해결하려 했다. 먼저 교차로를 배열로 만든다. 다음으로 [0,0] -> [0,1] ... -> [2,2]까지 출발지점을 이동하면서 해당 출발지점 일 때 갈 수 있는 곳을 1로 체크한다. 만약 0이 있다면 그건 갈 수 없는 곳이 있다는 뜻이므로 "NO" 출력하고 종료. 1로 체크하는 함수 짜는게 제일 힘들고 시간 많이 걸렸음.. #include #include #include #include #include #include #include #include using .. 더보기 [코드포스 Practice16] B. Blocks 이건.. 다 풀었는데도 이렇게 하는 게 맞나 싶었음.. 아닌 경우를 생각했는데 괜히 이거 말고 다른 경우가 있나 싶고.. 확실치 않아서 좀 찜찜했다 아무튼 처음에 봤을 때 딱 든 생각이 이거 어케하지????였음 그러다 걍 전에 비슷한 문제 푼 것 처럼 했다. 먼저 -1인 경우 제외하기.. 규칙 보니깐 길이가 짝수인데 b, w가 홀수 개 이면 안 되는 것 같아서 제외했다. 다음으로 문자열을 바꿔가면 되는데 이걸 난 전부 W로 만들려했다. 어차피 바꾸는 횟수가 생관없고 B, W 색깔 따져가며 하기 싫어서 다 W로 만들어버리자!로 정했음. 이 다음 푼 건 감인데 (그래서 엄청 찜찜했음) 뭔가 B를 전부 뒤로 밀어버리고 BB를 WW로 바꾸면 되겠다 싶었다. 그래서 BW -> WB로 BB -> WW로 바꾸게끔 짰.. 더보기 [코드포스 Practice16] A. Tanya and Toys 딱 보자마자 어떻게 풀지 감이 잡혔다. 먼저 장난감을 정렬 한 다음 1부터 10^9까지 반복문 도는데 이미 가지고 있는 장난감이면 합에 포함 안 시킨다. 그렇게 하다 합이 m을 넘으면 좋료~ 당연히 10^9라서 long long으로 합을 구했다. 코딩하면서 합이 long long을 벗어나면 어떡하지 이런 생각이 들었는데 1부터 n까지의 합이 n * (n -1) / 2니깐 10^9 * 10^9 = 10^18 / 2 라 long long 안에 있겠다 싶었다. #include #include #include #include #include #include #include #include using namespace std; using i64 = long long; int main() { int n; i64 m.. 더보기 [코드포스 Practice16] 후기 오 재밌었다! 손도 못 대겠는 문제는 없었는데 시간이 많이 걸려서 못 풀었다. 쩝; A는 딱 A정도로 풀었고 B는 맞다고 생각했는데 틀려서 C로 넘어갔고 C에서 거의 한시간 정도 쓰다가 다 짰는데 예시 안 돌아가서 그냥 포기하고 다시 B 잡았다. B 틀린거 찾겠다고 1부터 3까지 모든 경우의 수 돌려봤고, 찾았다!! 근데 10분안에 코딩 못 해서 틀렸다ㅋㅋㅋ 1솔브지만 명예 2솔브 하기로 시간으로 보면 이랬던 듯 20분 A풀기 -> 25분 B풀기 -> 틀렸길래 C로 넘어감 -> 40분 정도 C 풀고 예시로 확인했는데 틀림 -> 남은시간 B 해결 음.. 아쉬웠던 건 C에서 시간을 너무 많이 썼다. 짜는데 묘하게 재밌어서 시간 안 보고 짜다가 나중에 놀랬다ㅋㅋ D 한 번이라도 봤어야 했는데 그래도 이번에 배.. 더보기 [코드포스 Practice15] D. Queue 처음에 문제 이해 못하고 92 뒤에 31 있는거 아녀? 그런데 왜 답이 저렇지?? 생각했는데 임의의 사람 앞에 있는게 92 뒤에 있는 게 31이었다. 더 모르겠다.. 이걸 풀 수 있다고? 아 약간 링크드리스트처럼 앞-뒤 비교하면서 연결하는게 생각나긴 하는데 배고파서 내일 해야겠다. 지금 생각나는건 일단 O(N2^2)번 돌고.. queue 배열을 n개 만듬 그 다음 N^2번 돌면서 queue의 front랑 back이랑 같은지 비교함. 같다면 연결하고 queue없앰 이런식으로 쭉 돌면 마지막에 queue가 2개이거나 1개 남을 것 같은데 1개라면 그대로 출력 2개라면 징검다리로 두 개 있을테니 0으로 시작하는 걸 선두로 각각 하나씩 출력~ 문제는 이럼 제곱만큼 돌고 n은 20만이라 터질 것 같다. 음... .. 더보기 이전 1 ··· 4 5 6 7 8 9 10 ··· 16 다음