본문 바로가기

전체 글119

[Quantum Computing: An Applied Approach] [Quantum Computing: An Applied Approach] 제목 : [Quantum Computing: An Applied Approach] 지은이 : 잭 히더리 옮긴이 : 이태휘 출판사 : Springer 목차를 보고 이전에 구매했던 양자 컴퓨팅 책보다 더 다양하고 자세하게 설명이 된 것 같아 구매하였다. 예상처럼 양자컴퓨팅의 기본부터 양자 알고리즘까지 원하던 내용들이 자세한 예시와 함께 설명되어 있었다. 그리고 github 페이지도 운영하면서 예제들을 다운받아서 활용해볼 수 있어서 좋았다. 특히 부록으로 수학적인 배경을 학습할 수 있는 부분들이 탄탄하게 작성되어 있어서 매우 도움이 되었다. 예제들만 조금 더 보완된다면 입문강의용 서적으로도 부족함이 없을 것 같다. 공부하고 기록하고 싶은.. 2022. 4. 4.
백준 11505 : 구간 곱 구하기 (C++) [Segment tree] Segment tree에서 최소값, 최대값 구하는 것보다 조금은 더 생각해야 하는 것 같다. **문제풀이 방법 - Tree 생성, 업데이트, query 연산(곱하기) 함수 작성 ***코드 #include #include #include #define denum 1000000007 #define MAX_N 1000001 typedef long long int ll; using namespace std; // start, end : node가 담당하고 있는 구간 // left, right : 계산을 하려는 구간 int N, M, K; vectorarr; vectorsegment_tree; // Segment tree 초기화 ll build_segment_tree(int node, int start, int .. 2022. 4. 2.
백준 2357 : 최솟값과 최댓값 (C++) [Segment tree] 최솟값만 구하던 문제와 같은 방식으로 풀면 된다. 다만 두 개의 값을 반환하기 위해 segment tree를 각각 만들어서 진행한다. **문제풀이 방법 - 최솟값을 구하기 위한 segment tree와 최댓값을 구하기 위한 segment tree를 각각 만들고, 연산하는 것도 각각 연산 ***코드 #include #include #include #include #define INF 2e9 #define MAX_N 100001 using namespace std; int N, M; int min_value, max_value; vectorarr; vectorsegment_tree_min; vectorsegment_tree_max; int build_segment_tree_min(int node, int s.. 2022. 4. 1.
백준 10868 : 최솟값 (C++) [Segment tree] 세그먼트 트리를 연습할 수 있는 좋은 기본 예제이다. **문제풀이 방법 - 새로운 값이 들어와서 트리가 바뀌는 업데이트가 없으므로, 트리 생성과 최소값을 구하는 함수만 작성 ***코드 #include #include #include #include #define INF 2e9 #define MAX_N 100001 using namespace std; int N, M; vector arr; vector segment_tree; int min_value; int build_segment_tree(int node, int start, int end) { if (start == end) { segment_tree[node] = arr[start]; return segment_tree[node]; } int le.. 2022. 4. 1.
백준 2042 : 구간 합 구하기 (C++) [Segment tree] 기본적인 segment tree를 연습해 볼 수 있는 문제이다. **문제풀이 방법 - Segment tree 생성, 새 값이 들어왔을 때 update 함수, 합을 구하는 함수 작성 ***코드 #include #include #include typedef long long int ll; using namespace std; // start, end : node가 담당하고 있는 구간 // left, right : 합을 구하려는 구간 // Segment tree 초기화 ll init(vector& arr, vector& tree, int node, int start, int end) { if (start == end) { return tree[node] = arr[start]; } else { int mid .. 2022. 4. 1.
백준 1280 : 나무심기 (C++) [세그멘트 트리, 펜윅트리] 처음에 segment tree관련 문제를 찾아보다가 알게되어 풀게되었다. 당연히 segment tree문제이므로 segment tree를 이용해서 구현해야 하지만, 문제 내용만 보니 단순히 배열 입력 받은 후 이중 for문으로 구현이 가능할 것 같아서 구현해보았다. 아니나 다를까 시간초과가 되었다. 그래서 관련 해설을 찾아보던 중 '얍문'님의 블로그에서 펜윅트리를 이용한 풀이와, 펜윅트리에 대한 학습을 할 수 있었다. 풀이 코드는 '얍문'님의 코드를 거의 그대로 가져온 것이며, 개인 기록을 위해 작성해놓은 것이다. 자세한 설명을 원한다면 '얍문'님의 블로그를 확인하기를 강추한다. 정말 똑똑한 친구가 옆에서 수학문제 하나하나 설명해주는 것처럼 글을 잘 써주셨다. (감사합니다!) **문제풀이 방법 - 홀수 .. 2022. 3. 31.
SWEA 5604 : 구간합[D4] (C++) **문제 풀이 방법 - 입력된 숫자의 각 자리수를 더해줘야 하므로, modular 연산(나머지를 사용하는)을 사용한다. - 0~9 자리수 배열을 만든 후, 해당 자리의 값이 몇 번 등장하는지 count 한다. * Java 코드로 친절한 문제풀이를 해주신 은서파님께 감사드립니다. https://goodteacher.tistory.com/403 https://tv.naver.com/v/22678458 *** 코드 #include using namespace std; typedef long long ll; ll arr[10]; void parse(ll x, ll delta) {// 숫자 x의 각 자리수에 delta 만큼 count 증가 while (x > 0) { arr[x % 10] += delta; x /.. 2022. 3. 30.