본문 바로가기

전체 글

1806 부분합 무난하게 풀었다. 배열의 요소가 10,000이하이고 길이가 100,000이라 합 구하다가 100퍼 터지기 때문에 합은 long long으로 만들어줬다. #include #include using namespace std; using i64 = long long; int main() { int n, s; scanf("%d %d", &n, &s); vector v(n); i64 allSum = 0; for(int i = 0; i < n; i++){ scanf("%d", &v[i]); allSum += v[i]; } int l = 0, r = 0; int ans = n; int count = 1; i64 sum = v[0]; while(l < n){ if(sum < s){ if(r == n-1) break; .. 더보기
1644 소수의 연속합 보자마자 어떻게 풀지 감 와서 그대로 코드 옮겼다. 먼저 소수 벡터 구하고 다음으로 투포인터 사용해서 합이 n이 될 때 개수 세기. 소수는 2학년 때 과제 한다고 엄청 공부 많이 했는데 그 때 에라토스테네스 체 찾아본 적 있어서 이걸로 썼다. 내 기억상으로 이게 제일 빨랐음. 다음으로 투포인터로 합이 n인 경우 세기. 이건 할 말이 없다. 그냥 투포인터! 시간복잡도는 O(NlonN).. 소수 구하는 부분이 O(NlonN)이고 투포인터는 O(N)이라 합쳐서 O(NlonN)이 된다. 음.. 완벽하다 생각했는데 뭐가 문제지.. 이게 작은 수는 돌아가는데 큰 수에서 터진다.. #include #include using namespace std; using i64 = long long; int main() { i.. 더보기
2669 직사각형 네개의 합집합의 면적 구하기 몇 달을 붙잡고 있었던 문제.. 드디어 해결~~ 그동안 어디서 막혔냐면 계산할 때 겹치는 부분은 어떡할것인가...! 이거에 대해서 계속 고민하다가 결국 힌트 받아서 해결했다. 다시 생각해도 힌트 없었으면 못 풀 것 같은 문제였다ㅋㅋㅋㅋ 진짜 알면 푸는데 모르면 못 푸는 문제 이걸 넓이 계산으로 문제를 풀지 말고 사각형이 존재하는지 판단하는 걸로 풀면 편하다. 범위가 100밖에 안 되니깐 100*100 벡터를 만들어서 전부 0으로 초기화 하고, 사각형이 존재하면 그 부분은 1로 바꾼다. 마지막에 1의 개수만 세면 면적의 넓이를 구할 수 있다. 너무 신선하고 기발하다! 이렇게도 풀 수 있구나. 전혀 다른 접근법이라 감도 못 잡았다ㅋㅋㅋ #include #include using namespace std; i.. 더보기
1652 누울 자리를 찾아라 오랜만에 백준 푸니깐 재밌네 일단 한글이고 채점도 빨리되고 구린UI 보다가 백준보니 묘하게 행복해진다. 이 문제는 투포인터 문제.. 투포인터는 아니고 새끼투포인터.. (아닌가?) 그래서 left, right 따로 지정 안 하고 걍 바로 셌다. #include #include using namespace std; int main() { int n; char enter; scanf("%d", &n); scanf("%c", &enter); vector v(n, vector(n)); for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ scanf("%c", &v[i][j]); } scanf("%c", &enter); } int result = 0; for(int i.. 더보기
이차원벡터 선언 vector arr(6, vector(5, 0)); arr[6][5] 맨날 까먹어서 맨날 찾아보네 더보기
[코드포스 Practice8] E. The Meeting Place Cannot Be Changed The main road in Bytecity is a straight line from south to north. Conveniently, there are coordinates measured in meters from the southernmost building in north direction. Bytecity에 있는 메인로드는 남쪽에서 북쪽으로 일직선이다. 편리하게, 가장 남쪽의 건물에서 북쪽 방향으로 미터로 측정된 좌표가 있다. At some points on the road there are n friends, and i-th of them is standing at the point xi meters and can move with any speed no greater than vi m.. 더보기
[코드포스 Practice8] D. Team Now it's time of Olympiads. Vanya and Egor decided to make his own team to take part in a programming Olympiad. They've been best friends ever since primary school and hopefully, that can somehow help them in teamwork. 지금은 올림피아드 시간입니다. Vanya와 Egor는 프로그래밍 올림피아드에 참가하기 위해 팀을 만들기로 결정합니다. 그들은 초등학교때부터 절친한 친구였고 희망컨데 그것이 팀워크에 어떻게든 도움이 될 수 있습니다. For each team Olympiad, Vanya takes his play cards with num.. 더보기
[코드포스 Practice8] C. Obtain Two Zeroes You are given two integers a and b. You may perform any number of operations on them (possibly zero). 당신에게 a와 b 두개의 정수가 주어졌다. 당신은 이 숫자들에 몇번이라도 연산할 수 있다. (0번이어도 됨) During each operation you should choose any positive integer x and set a:=a−x, b:=b−2x or a:=a−2x, b:=b−x. Note that you may choose different values of x in different operations. 각 연산을 하는 동안 당신은 어떤 양의 정수 x를 골라서 a:=a−x, b:=b−2x or a:=a−.. 더보기