Problem Solving
-
백준 13398번, 연속합 2 풀이
문제 백준 13398번 풀이 그냥 연속한 수열에서 최댓값을 구하는 점화식은 $ dp[i] = max(dp[i] + arr[i], 0) $이라는 것을 알고 있습니다. ( ... ⓐ ) 여기 다른 dp 배열을 하나 더 만들어, 수를 한번 제거하였을 때의 최댓값도 같이 관리해줍니다. ( ... ⓑ ) 그러면, ⓐ의 DP 배열을 $ A $, ⓑ의 DP 배열을 $ B $라고 하면, $ A $는 위 점화식으로 쉽게 채워줄 수 있습니다. $ B = max(A[i - 1], B[i - 1] + arr[i]) $라는 점화식으로 나타낼 수 있습니다. $ A_i $까지 더한 합에서 $ i $만 제하는 경우 또는 $ B_i $에서(이미 한번 뺀 경우) 현재 값을 더해준 경우로 두 가지로 나뉘기 때문에 위와 같은 점화식이 나옵..
2021.03.20 15:34 -
백준 15487번, A[j]-A[i]+A[l]-A[k] 풀이
문제 백준 15487번 풀이 임의의 인덱스 $ a $를 기준으로 나누었다고 가정해봅시다. 이제 두 구간 $ [1, a] $에서 $ -A[i] + A[j] $의 최댓값과, $ (a, N] $에서 $ -A[l] + A[k] $의 최댓값을 구하면 됩니다. $ a $를 기준으로 왼쪽 구간의 최댓값의 배열과 오른쪽 구간의 최댓값의 배열을 각각 $ L, R $이라고 두면, 범위가 늘어날수록 최댓값이 점점 커지므로 투포인터 같은 DP로 $ L, R $을 $ O(N) $에 채워줄 수 있습니다. 그러면, 모든 $ i $에 대하여 $ L[i] + R[i + 1] $의 최댓값이 정답이 됩니다. (양쪽으로 나누는 기준점이 포함되면, 중복으로 선택될 수 있기 때문에 양쪽 중 하나에서는 빼야합니다.) 소스코드 #include #..
2021.03.12 22:23 -
백준 2904번, 수학은 너무 쉬워 풀이
문제 백준 2904번 풀이 $A$를 나눌 수 있는 $X$는 $A$의 소인수를 의미합니다. 이 점을 유의해서 문제를 접근해봅시다. 연산을 잘 실행해준 뒤 각 수들의 최대공약수를 최대화하려면, 모든 수들의 소인수를 골고루 분배해주면 됩니다. 예를 들면, $2^5 \cdot 3^1$과 $2^1 \cdot 3^3 $라는 두 수가 있다고 생각해봅시다. 소인수 2는 총 6개, 3은 4개가 있습니다. 이제 위 소인수들을 골고루 분배하면, 각각의 수는 $2^3 \cdot 3^2$이 됩니다. 위 방법(모든 수의 소인수 개수를 세는 것)으로 최대공약수를 최대화할 수 있는데, 몇 번을 움직여야 하는지도 구해야합니다. 예를 들어서, $2^5 \cdot 3^1 \cdot 5^3$이라는 수가 있고, 위에서 구한 최대공약수가 $2..
2021.02.25 14:18 -
백준 9878번, Bessie Slows Down 풀이
문제 백준 9878번 풀이 이벤트 T와 D를 순서대로 처리해야 합니다. 이벤트 T와 D 각각에서는 작은 것부터 차례로 봐주면 되지만, T와 D 원소 각각에 대해서는 대소 관계를 정의하기는 어렵습니다. 하지만, 매번 T와 D 중에 가장 작은 원소끼리만 비교하여 현재 순간에서 이벤트 T가 먼저 오는지, D가 먼저 오는지 판별하여 처리해주는 것은 쉽습니다. 위 작업을 하기 위해서, 현재 시간과 현재 위치를 저장해두며 문제에서 시킨대로 하면 됩니다. 작은 것부터 봐주는 과정은 우선순위 큐, 나머지는 구현입니다. 소스코드 #include #define all(v) v.begin(), v.end() using namespace std; typedef long long ll; typedef unsigned long ..
2021.02.22 20:13
개발
-
CLion 설치와 WSL 설정하기
CLion에는 컴파일러가 내장되어 있지 않으므로, Visual Studio의 MSVC, MinGW에서 gcc(g++)을 잡아 사용합니다. 하지만 MSVC의 경우 한글 폴더가 있으면 깨질뿐더러 온라인 저지 사이트에서는 대부분 gcc를 사용하니 동일한 답을 보장하지 않는 경우도 생깁니다. 일부 분들은 MinGW에서 C++17, 20에서 일부 비표준 헤더(bits/stdc++.h)들을 불러오지 못하는 오류를 겪는 것을 보았습니다. 그래서 오늘은 윈도우에서 제공하는 WSL(Windows Subsystems for Linux)로 Linux 환경의 gcc를 사용해 C(C++)를 컴파일하는 방법에 대해 다뤄보겠습니다. 우선 CLion은 JetBrains에서 제공하는 IDE입니다. 유료이기 때문에 30일 체험판을 받아..
2020.12.12 12:20 -
티스토리 블로그 본문 폰트 및 코드 블럭 폰트, latex(수식) 글꼴 변경하기
위와 같이 글 본문에는 나눔 스퀘어, 수식에는 기본 폰트, 코드 블럭 내부는 Fira Code 폰트를 사용하였습니다. * { font-family: 'NanumSquare', sans-serif; } .mjx-math { font-family: inherit !important; } code, code * { font-family: 'Fira Code', 'NanumSquare', sans-serif !important; /*font-family: 'D2Coding', 'NanumSquare', sans-serif !important;*/ } CSS는 위와 같이 수정하시면 됩니다. 폰트 로딩은 저는 아래 CDN들을 사용했으니 참고하실 분은 참고하시면 될 것 같습니다. 코드 에디터는 블로그 설정 > 스킨 ..
2020.10.05 23:56 -
자가진단 매크로 스크립트 만들어보기
nnnlog.tistory.com/18 교육청 자가진단 웹페이지 분석 (9월 말 경 업데이트[점검] 이후) 9월 말 점검 이후 RSA key가 그대로길래 오류 수정한 줄 알았는데 API 관련하여 꽤 수정이 있었던 것 같습니다. 다시 분석하는겸 분석 과정도 적어보겠습니다. 학교 검색 API 기존에는 /school을 사용�� nnnlog.tistory.com 위에서 2차 개편된 사이트의 API 분석을 완료하고 그대로 구현했습니다. Node.js로 작성한 코드: github.com/eduro-hcs/jaga_jindan_automatic_js eduro-hcs/jaga_jindan_automatic_js 자가진단 자동화 스크립트 with Javascript. Contribute to eduro-hcs/jaga..
2020.10.05 10:35 -
티스토리 블로그 글 목록 예쁘게 꾸며보기
일반적인 티스토리 블로그 테마를 사용하면 [사진] [글 정보]와 같이 나열되게 되는데 좀 예쁘게 꾸밀 수 없을까? 라는 생각을 해봤습니다. 특히 Portfolio 테마는 커버로 100% 글 채우기가 가능해서 예쁜 테마라고 생각하는데, 글 목록은 좀 밋밋한 감이 있었습니다. 그래서, 예쁘게 꾸미는 방법이 없을까 하다가 코더님의 블로그를 보게 되었습니다. 밋밋하지 않고 예뻤습니다. 그래서 제 블로그에도 가져와 쓰고 싶어서 직접 구현해보았습니다. 위와 같이 글의 정보 뒤에 글의 배경 이미지가 들어가있고, 가독성을 높이기 위해 블러 처리가 된 것을 볼 수 있습니다. 코드를 짜면서 생각보다 난관이 많았습니다. 간단하게 코드 설명만 하겠습니다. 우선, 글의 정보와 대표 이미지가 겹치도록(overlay) 만들어야 합..
2020.10.03 21:47
분석
-
교육청 자가진단 웹페이지 분석 (9월 말 경 업데이트[점검] 이후)
9월 말 점검 이후 RSA key가 그대로길래 오류 수정한 줄 알았는데 API 관련하여 꽤 수정이 있었던 것 같습니다. 다시 분석하는겸 분석 과정도 적어보겠습니다. 학교 검색 API 기존에는 /school을 사용했는데 현재는 /v2/searchSchool로 변경된 것을 볼 수 있습니다. 파라미터 부분은 변한 것이 없는 것을 볼 수 있습니다. eduro-hcs/PoC[school.js]: 기존 코드 로그인 API (학교, 이름, 생년월일) 기존 로그인 API는 loginwithschool 이였는데 /v2/findUser로 변경되었습니다. 여전히 Host는 {교육청}hcs.eduro.go.kr 입니다. 볼 수 있듯이 생년월일과 이름은 여전히 암호화되어있고, orgCode(학교 코드)는 평문 전송입니다. 점검..
2020.10.04 17:21 -
자가진단 사이트 분석 [4] _ Dart로 PoC 코드 작성해보자.
github.com/eduro-hcs/poc_dart eduro-hcs/poc_dart PoC with Dart, (firststep for flutter app dev). Contribute to eduro-hcs/poc_dart development by creating an account on GitHub. github.com Flutter로 본인의 이름, 비밀번호, 학교 등 기본 정보만 채워넣으면 자동으로 자가진단하는 앱을 만들어보고자 하는데 사실 Dart로 가능한지 궁금했습니다. 일단 RSA 부분이 골 때렸는데, openssl을 이용해서 der -> pem으로 변환하는 과정을 거쳐서 public key를 뽑았고, Dart의 encrypt 패키지를 사용하여 성공적으로 RSA Encryption을 ..
2020.09.27 19:48 -
자가진단 사이트 분석 [3] _ PoC 코드 작성 완료 (비밀번호 없이 설문 가능)
1번 과정에서 Authorization 헤더에 사용되는 JWT를 받게 되고, 그 토큰을 가지고 2, 3번 과정을 통해서 비밀번호 검증을 합니다. 그런데, 비밀번호(2,3) 과정을 생략하여도 4,5,6번 과정으로 진행할 수 있었습니다. JWT에다가 비번 확인했는지라도 박아놓던가.. 실제로 위 스크립트를 가지고, 1번 과정을 통해서 JWT를 받아서 6번, 설문을 제출할 수 있습니다. 결국, 부실하게 구축한 것이나 마찬가지 입니다.
2020.09.27 19:46 -
자가진단 사이트 분석 [2] _ PoC 코드 작성
PoC 코드는 아래 깃허브에서 볼 수 있습니다. https://github.com/eduro-hcs/PoC eduro-hcs/PoC 자가진단 웹페이지, Proof of concept. Contribute to eduro-hcs/PoC development by creating an account on GitHub. github.com 로그인(계정 정보)가 없는 상태로 웹에 들어가게 되면, 이름, 생년월일과 학교 선택하는 창이 나옵니다. 여기서 submit하게 되면 loginwithschool에 xhr 요청을 보냅니다. 여기에 앞으로 Authorization 헤더에 사용될 JWT 토큰이 담겨있습니다. 그리고, 비밀번호 입력창으로 넘어갑니다. (이미 계정을 생성했다는 가정 하에) 비밀번호를 치면 second..
2020.09.27 19:43