본문 바로가기

포함배제원리와 뫼비우스함수 https://www.acmicpc.net/problem/29157 29157번: 폭탄 피하기 성모가 이동할 수 있는 경우의 수를 출력하라. 답이 커질 수 있으므로 $1\,000\,000\,007 (=10^{9} + 7)$로 나눈 나머지를 출력한다. 단, $1\,000\,000\,007$은 소수이다. www.acmicpc.net 이 문제를 읽어보면 먼과거 봤던 격자판에서의 최단경로로 이동할 수 있는 경우의 수가 문득 생각난다. R!C! / (R+C)! 이런 공식인데 뭔가 이를 이용한 문제인것같다. 중요한것은 성모가 모든 폭탄들을 피해서 이동한다는 것이다. 장애물이 있었을때는 해당 점 옆을 지나는 경우의 수를 세줬으면 됐는데 이 문제는 폭탄이 매우 많다. 그렇다면 다른 방법으로 생각을 해보자 전체 가는 경..
자바스크립트 싱글스레드 도입 최근 현장실습 가서 어노테이션 툴을 개발하다가 생긴 의문점이었다. react같은 프레임워크를 사용하지않고 html, css, javascript를 쓰고 bootstrap, fastapi를 사용했다. 본문 1. fabric.js 를 사용하는데 객체를 edit, add 할 때 변수등의 데이터를 어떻게 관리해야할까? - local storage, session storage 를 사용하여 새로고침 또는 종료해도 작업하던 데이터가 남아있게했다. - 변수처럼 class, id를 사용했는데 이는 이렇게 사용하는게 맞는지를 잘 모르겠다. 2. 바닐라 자바스크립트로 개발을 하다 보니 html 파일 밖으로 빼서 관리를 해주는데 어떤 코드들은 html 내부에서 로 실행하면 동작하는데 어떤 코드들은 분리하니 작동을 잘 ..
모듈러 역원와 페르마의 소정리 https://www.acmicpc.net/problem/13172 13172번: Σ 모듈러가 11에서 1,000,000,007이 되어 답이 달라졌지만, 역시 3을 곱한 다음 1,000,000,007으로 나눈 나머지는 7이 된다. www.acmicpc.net 모듈러 역원에 대해서 잘 설명해 놓은 문제이다. 핵심은 7/3 과 같은 분수를 답으로 하는 문제들을 판별하기 위해 a × b ^(-1) mod X 형태로 만드는것이다. 여기서 b^-1 이 모듈러 곱셈의 역원이다. ll dq(ll a, ll b) { if (b == 1) return a; if (b % 2 == 1) return a * dq(a, b - 1) % MOD; ll c = dq(a, b / 2); return c * c % MOD; } fo..
2023 전남대학교 PIMM 알고리즘 파티 후기 같은 동아리 후배 belline0124 가 알고리즘을 공부하는 우리들에게 백준에 OpenContest를 열어보지 않겠냐는 제안을 했다. 그리고 그 제안을 하고나서 머지않아 바로 스케쥴링 및 실행에 앞섰고 23.09.03 이를 실행하고야 만다. 준비과정 처음 운영해보는 대회 이기 때문에 사전조사가 사실 더 중요했다. 대회는 어떤 식으로 진행하는가? 검수는 어떻게 해야하는가? 무엇을 준비해야하는가? 등과 같다. 따라서 우리 팀원들이 직접 검수를 하면서 대회의 진행방식을 조사하였고 이를 추합하여 운영 방침을 잡았다. 크게보면 대회 과정은 다음과 같다. 1. 문제 출제 2. 문제 검수 3. 대회 홍보 4. 대회 개최 5. 상품 수령 전남대학교 같은 경우에 대회를 열기 어려운 가장 큰 이유는 사실 1번에 있다. ..
러스트 Structure, Enum Structure 같은경우에 말 그대로 C++의 구조체와 비슷하다. struct User { active: bool, username: String, email: String, sign_in_count: u64, } fn main() { let user1 = User { active: true, username: String::from("someusername123"), email: String::from("someone@example.com"), sign_in_count: 1, }; } 이런식으로 이름없이 사용도 가능하다. 사용은 Color.0, Color.1 이런식으로 쓸수 있다. struct Color(i32, i32, i32); struct Point(i32, i32, i32); fn main()..
새로운 플젝 아이디어 2 전에 기획해놓은 플젝 시작도 안했는데 새로운 아이디어가 떠올라서 문득 메모만 해놔야겠다. 알고리즘 문제 사이트 https://www.acmicpc.net/ https://codeforces.com/ https://atcoder.jp/ 대회들의 시간을 https://ctftime.org/ 처럼 정리해 주는 사이트가 있었으면 좋겠다. 대회들이 특정 사유에 의해서 시간이 바뀌거나 하는것을 사이트 일일이 들어가면서 파악하기 힘들기 때문이다. 그렇다면 문제가 어떻게 모으는가이다. 1. 특정시간 기준으로 사이트에 데이터를가져옴 2. 유저들의 데이트를 받고 검증함 3. 그냥 유저들이 수정하게만듬
러스트 Ownership2 let mut s = String::from("hello"); let r1 = &mut s; let r2 = &mut s; println!("{}, {}", r1, r2); 이 코드는 불가능 하다. 하나의 변수에 여러개의 mutable한 참조를 할 수 없다. Data race 개념인데 러스트는 data race 를 compile할때 막는다. data race는 다음과 같은 상황에 발생한다. - 두개 이상의 포인터가 한번에 같은시간에 가리킨다. - 최소 하나의 포인터가 데이터를 쓰는데 사용되고있다. - 데이터 접근하는데 동기화하는 매커니즘이 쓰이지 않는다. let mut s = String::from("hello"); { let r1 = &mut s; } // r1 goes out of scope here..
일단 일시중지 다음 팀플젝전에 개인플젝을 해보고 하려했는데 생각보다 시간이 부족할것같아서 일시정지 시켜놓고 팀플젝 마무리하고 숙련도를 쌓아서 개인플젝을 훨 수월하게 하려고한다. 러스트랑 알고리즘이 지금은 더 재밌기도 하다..