본문 바로가기

백준

16510 Predictable Queue 오.. 편하다! 앞으로 뭔가 찾아야 할 때는 bound 써야지! 이건 lower_bound 보다는 upper_bound 쓰는게 좋아서 upper를 사용했다. #include #include #include using namespace std; int main() { int n, m; scanf("%d %d", &n, &m); vector v(n); scanf("%d", &v[0]); for(int i = 1; i < n; i++){ scanf("%d", &v[i]); v[i] += v[i-1]; } for(int i = 0; i < m; i++){ int input; scanf("%d", &input); printf("%d\n", upper_bound(v.begin(), v.end(), input)-v... 더보기
10816 숫자 카드 2 lower_bound와 익숙해지기 2.. 반환값이 iterator인 건 알겠는데 여기서 index는 어떻게 구하지...?에서 막혔다. 알고보니 iterator끼리 뺄셈 가능해서 v.begin()을 빼면 구할 수 있었다. 아.. 그리구 iterator 변수 만들고 싶어서 iterator tmp 이런 식으로 선언했는데 에러가 떴다. 검색해보니 std::vector::iterator tmp 이렇게 써야 하는 것 같다.. 얘는 왜 이렇게 생겼지 #include #include #include using namespace std; int main() { int n; scanf("%d", &n); vector v(n); for(int i = 0; i < n; i++) scanf("%d", &v[i]); sort(v.. 더보기
10815 숫자 카드 처음 써 본 lower_bound 문제.. 이 함수 return 값이 배열의 위치라길래 아 그럼 인덱스인가? 해서 int tmp에 인덱스가 들어있는 줄 알았다. 알고보니 iterater였다. 어색한 iterater.. 그래서 앞에 * 붙여서 값을 들고왔다. 다음으로 값이 없을 수 있으므로 input과 같은지 확인했음 #include #include #include using namespace std; int main() { int n; scanf("%d", &n); vector v(n); for(int i = 0; i < n; i++) scanf("%d", &v[i]); sort(v.begin(), v.end()); int m; scanf("%d", &m); for(int i = 0; i < m; i++.. 더보기
15885 고장난 시계 문제 어떻게 풀지 고민하다가 딱 느낌이 왔다. 음수면 반대로 가니 더하기가 되고 양수면 느리게 가니 뺄셈이 되는 식.. #include int main(){ int a, b; scanf("%d %d", &a, &b); printf("%d", 2-a/b*2); return 0; } 음 그런데 틀렸다; 다시 보니 a가 4고 b가 1이면 4배나 빨라지는데 그러면 값이 커져 음수가 된다. 내 생각에는 절댓값이 1보다 큰 경우 작은 경우 나눠서 생각해야 할 것 같다. 그리고 음수.. 음수면 어떻게 되는지 감이 잘 안 잡힌다. 아무튼 이 생각은 다음으로... 다시 시도한 고장난 시계 문제 문제 풀 때 좌뇌 우뇌 쪼개서 좌뇌는 정상시계 돌리고 우뇌는 고장난 시계 돌리고 싶었다 진심.. 너무 헷갈려서 12시간 기준으로.. 더보기
1252 이진수 덧셈 전에 이렇게 풀다가 졸리다고 그만 둔 문제.. 오늘 다시 풀었다. 이 위의 로직은 전에 세웠는데 그 때 결국 잘못 세웠다로 결론이 나서 다시 세웠음ㅎㅎ 문제 이렇게 정의해서 이이이ㅣ이이렇게 풀었다. 이 문제의 까다로운 점이라면 80자리 이진수라 문자열로 덧셈을 구현해야 한다는 점이랑 앞에 0이 붙는거.. 이것때문에 어려웠다. 먼저 앞에 0이 있기 떄문에 계산할 구간을 따로 구했다. 처음에 1이 나오는 부분을 시작으로 잡아서 맨 뒤에서 이까지 젓셈을 했다. 다음으로 두 문자열의 길이가 다르므로 길이가 짧은 문자열을 기준으로 덧셈을 한 뒤 나머지 부분을 따로 더해서 붙였다. 아 그런데 조건에서 자꾸 문제가 생겨서 힘들었음ㅜ 처음에 for문 조건으로 (start1 == end1+1) || (start2 == .. 더보기
1790 수 이어 쓰기2 (미완) #include using i64 = long long; using namespace std; int ten[10] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000}; int nn[10] = {0, 9, 90, 900, 9000, 90000, 900000, 9000000, 90000000, 900000000}; int ns[10] = {0, 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999}; int main() { int n, k; scanf("%d %d", &n, &k); int len; i64 sum = 0; for(int i = 1; i 더보기
1059 수2 그냥 구간 안의 숫자 개수를 구하면 되겠다 싶었다. 그래서 n이 포함된 구간을 구하고 그 구간의 길이를 사용해서 답을 구했다. #include #include #include using namespace std; int main() { int l, n; vector v(1, 0); scanf("%d", &l); for(int i = 0; i < l; i++){ int tmp; scanf("%d", &tmp); v.push_back(tmp); } scanf("%d", &n); sort(v.begin(), v.end()); int c = 0; for(int i = 0; i < v.size() - 1; i++){ if(v[i] < n && n < v[i+1]) c = v[i+1] - v[i] - 2; } pr.. 더보기
7795 먹을 것인가 먹힐 것인가 처음에 그냥 다 탐색해보려 했는데 터질 것 같아서 counting sort로 했다. 로직도 잘 짠 것 같고 조금 걱정이라면 시간초과가 나지 않을까 하는 걱정인데 런타임 에러가 떴다. 맞왜틀? counting sort 생각해낸 자신에 대해 뿌듯해하고 있었는데 실패라니 맴이 아프다. 다시 봐도 왜 틀렸는지 모르겠다. 런타임 에러면 실행 중에 문제가 있다는 뜻인데 어느 부분에서 문제가 생긴 거지? 범위도 맞는 것 같고 int도 안 터지고.. 0으로 나누는 것도 없고... #include #include using namespace std; int main() { int t; scanf("%d", &t); for(int i = 0; i < t; i++){ int a, b; scanf("%d %d", &a, &b.. 더보기