an0520a의 등록된 링크

 an0520a로 등록된 네이버 블로그 포스트 수는 15건입니다.

윈도우11에서 Magisk On Wsa로 루팅을 숨긴 WSA 사용하기 [내부링크]

현재 태블릿으로 서피스 프로 8을 사용 중이다. https://youtu.be/Ke4kXDfsDuE 원래는 아이패드를 고려했었는데, 코딩할려면 윈도우 태블릿이여해서... 그래도 모바일 앱에대한 미련이 남아 결정하지 못한 상태였는데, WSA(Windows Subsystem for Android)를 통해 안드로이드를 사용할 수 있다는 이야기를 듣고 바로 서피스 프로를 구매했다. 그런데 실제로 사용해보니 문제가 있었는데, 바로 Google Play가 설치되어있는 WSA는 루팅이 되어있는 상태라는 것. 루팅 상태에서는 몇몇앱을 사용할 수 없다. 이를 해결하기 위해선 루팅을 숨길 수 있는 Magisk On Wsa이 존재한다. 그러나 Magisk On Wsa가 github의 리소스를 과도하게 사용해서 블락을 당한 관계로(workflow 기능이 github 서버에 부하를 많이 준 것으로 생각됨), Magisk On Wsa Local을 통해 설치할 필요가 있다. 준비물 : Ubuntu(WSL 사용

백준 17219번 (BOJ - 17219) : 라이브러리 안쓰고 풀기 [내부링크]

#include <stdio.h> typedef unsigned int u32; size_t mystrlen(char* src); void mystrcpy(char* dest, char* src); int mystrcmp(char* dest, char* src); size_t mystrlen(char* src) { char* p = src; size_t len = 0; while(*p) { p++; len++; } } void mystrcpy(char* dest, char* src) { char* dest_p = dest; char* src_p = src; while(*src_p) { *(dest_p++) = *(src_p++); } (*dest_p) = '\0'; } int mystrcmp(char* dest, char* src) { char* dest_p = dest; char* src_p = src; while(*dest_p && *src_p) { if (*(dest_p) <

RE - 제로부터 시작하는 부채널 공격 [내부링크]

정보보호영재교육원에서 만든거. 블로그 운영 한번 해볼려고함 공부용으로

C언어 개념 정리 - 1 [내부링크]

예전에 정리했던건데, 나름 필요하다고 생각하는것만 모아놨음 옛날에 썻던거라 틀린 부분 있을수도 있음 한글파일에서 복붙한거라 개행된거 날라가서 가독성 ㅈ망임 C언어는 대소문자를 구별한다. #include<stdio.h> 는 헤더파일 stdio.h를 소스 코드 안에 포함한다는 뜻이다. stdio.h 는 헤더 파일로 표준 입출력에 대한 라이브러리 함수의 정의가 들어 있다. 주석이란? : 주석을 이용하면 작성한 코드를 컴파일에서 제외 할 수 있다. 주로 코드를 설명할 때 주로 사용한다. main 함수) int main(void) { } int - 함수의 출력타임 main 부분 - 함수의 이름 (void) - 함수의 입력타입, void는 입력이 없다는 의미이다. {} - 작업을 지시하는 문장들이 들어가는 부분이다. (조금 다르긴 한데 일단은 그렇게 받아들이고 있으면 됨) 함수 안에 있는 문장들은 언제 실행? - 함수가 호출되면 실행됩니다. 함수의 호출 방법은? - 함수의 이름을 적어주면 됩니

공리와 수학적 귀납법 [내부링크]

Thm 1.1 공리 (principle) : 굳이 증명하지 않아도 누구나 사실로 받아들일 수 있는 것 공리의 예 (example of principle) - S가 음이 아닌 정수들로 이루어진 집합일 때. S는 최소의 원소를 반드시 갖는다. 예제) a, b가 양의 정수 일 때, na>=b 인 정수 n이 반드시 존재함을 증명하여라. sol) na >= b를 만족하는 정수 n이 존재하지 않는다고 가정하자. 그러면 na < b 다 그러면 b-na > 0 이고 (그 어떤 정수 n 값이든!) 집합 S = b-na (n은 정수) 이라 할 때 S는 양의 정수로만 이루어진 집합이다. S는 well-ordering principle에 의거해 최소의 원소를 갖는다. 최소의 원소를 t라 할시 t는 집합 S에 속하며 t= b-ka (k는 어떤 정수)이다. b-(k+1)a<b-ka 이고 b-(k+1)a는 S의 원소 이다. 그런데 b-ka가 집합 S의 최소의 원소라고 정의 했으므로 b-(k-1)a가 S의 원소

유클리드 호제법 [내부링크]

Thm 2.2 a와 b가 정수이고 b>0 일 때 a = g*b + r (0≤r≤b) 인, g와 r이 반드시 유일하게 존재한다. (유클리드 호제법) GREATEST COMMON DIVISOR (최대 공약수) a가 b를 나눈다(b가 a에 의해 나눠진다. ) -> b = ac를 만족하는 정수 c가 존재한다. -> b는 a의 배수이다. a는 b의 약수이다. 0은 모든 수의 배수이다. / 1은 모든 수의 약수이다. 자기 자신은 자기 자신의 약수이다. 예) 0 = a * 0 a가 b를 나눈다는 것을 기호로 다음과 같이 나타낸다. a | b a가 b를 나누지 못한다는 것을 다음 기호로 나타낸다. (대충 수식으로 쓰는 문자가 뭔지 몰라서 그림판으로 그렸다는 뜻) 정수 d가 다음 조건을 만족할 때, d는 a와 b의 gcd라 한다. 1. d | a, d | b // d는 a와 b의 공약수이다. 2. c | a, c | b // c ≤ d (d는 a, b의 공약수 중 가장 크다.) = c | a, c

BOJ 2164 (카드 2) [내부링크]

https://www.acmicpc.net/problem/2164 2164번: 카드2 2164번 제출 맞은 사람 숏코딩 재채점 결과 채점 현황 강의 카드2 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 (추가 시간 없음) 128 MB 25947 13740 11550 54.540% 문제 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 ... www.acmicpc.net 보통 큐를 해결해서 문제를 푼다고 하는데, 재귀로도 해결이 가능하다. 조금만 고치면 반복문으로도 가능. (당연한 이야기지만, 재귀나 반복문으로 해결하는게 큐보다 공간복잡도 측면에서도, 시간복잡도 측면에서도 훨씬 낫다.) #include

BOJ 4149 (큰 수 소인수분해) [내부링크]

https://www.acmicpc.net/problem/4149 4149번: 큰 수 소인수분해 4149번 제출 맞은 사람 숏코딩 재채점 결과 채점 현황 강의 큰 수 소인수분해 출처 다국어 전체 채점 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 128 MB 4115 1133 298 14.170% 문제 큰 수를 소인수분해 해보자. 입력 입력은 한 줄로 이루어져 있고, 소인수분해 해야 하는 수가 주어진다. 이 수는 1보다 크고, 2 62 보다 작다. 출력 입력으로 주어진 양의 정수를 소인수분해 한 뒤, 모든 인수를 한 줄에 하나씩 증가하는 순서로 출력한다. 예제 입력 1 복사 18991325453139 예... www.acmicpc.net 소인수 분해 알고리즘으로 해결하면 된다. 수체 체 알고리즘으로 해결하고 싶었는데 도저히 관련 자료가 안보여서, 폴라드 로 알고리즘을 통해 해결 밀러-라빈 소수 판정법에 있는 a 배열의 값을 설정만 잘 해주면, 수십ms에서 정말

C++) 직접 만든 힙 코드 [내부링크]

첨부파일 heap.cpp 파일 다운로드 람다식, 함수, 함수객체(펑터)(이경우, 두번째 템플릿 인자를 해당 함수 객체로 설정 해주저어야함)을 인자로 받아서, 최대힙, 최소힙, 절댓값힙 등등을 만들 수 있다. #include <string> #include <exception> class Heap_error : public std::exception { public: Heap_error(const std::string &_errorMessage) : errorMessage("Heap error : " + _errorMessage) {} const char *what() const throw() override { return errorMessage.c_str(); } private: std::string errorMessage; }; template <typename T, typename cmp_f = int (*)(const T &, const T &)> class Heap { pu

트리(Tree) [내부링크]

트리(Tree) - 계층 구조를 표현하는 추상적인 자료형 - 부모와 자식의 관계를 가지고 있는 노드가 모여 트리를 이룸 트리의 용어 • root (루트) - 가장 최상위의, 부모가 없는 노드 • Internal node (내부노드) - 적어도 하나 이상의 자식을 가진 노드 • External node (leaf, 외부노드, 잎) - 자식이 하나도 없는 노드 •Ancestors of a node (노드의 조상) - 노드의 조상들 (부모, 조부모, 증조부모 등등...) •Depth of a node (노드의 깊이) - 조상의 수를 의미 •Height of a tree - 임의의 노드에 대한 최대 깊이, 즉 해당 트리에서 임의의 노드를 골랐을 때, 나올 수 있는 깊이의 최댓값 •Descendant of a node - 노드의 후손들을 의미 (자식, 자식의 자식 등등...) Tree ADT의 멤버 함수 •int isSize() - 노드의 개수를 반환 •bool isEmpty() - 노드가

BOJ 2638) 치즈 [내부링크]

치즈 성공출처 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 128 MB 10480 4729 3547 45.254% 문제 N×M (5≤N, M≤100)의 모눈종이 위에 아주 얇은 치즈가 <그림 1>과 같이 표시되어 있다. 단, N 은 세로 격자의 수이고, M 은 가로 격자의 수이다. 이 치즈는 냉동 보관을 해야만 하는데 실내온도에 내어놓으면 공기와 접촉하여 천천히 녹는다. 그런데 이러한 모눈종이 모양의 치즈에서 각 치즈 격자(작 은 정사각형 모양)의 4변 중에서 적어도 2변 이상이 실내온도의 공기와 접촉한 것은 정확히 한시간만에 녹아 없어져 버린다. 따라서 아래 <그림 1> 모양과 같은 치즈(회색으로 표시된 부분)라면 C로 표시된 모든 치즈 격자는 한 시간 후에 사라진다. <그림 1> <그림 2>와 같이 치즈 내부에 있는 공간은 치즈 외부 공기와 접촉하지 않는 것으로 가정한다. 그러므 로 이 공간에 접촉한 치즈 격자는 녹지 않고 C로 표시된 치즈 격자만 사라진다. 그

BOJ 12100 - 2048 (Easy) [내부링크]

이건 그냥 개 빡구현 문제다. 풀면서 몇번이나 속으로 ㅅㅂ ㅅㅂ ㅅㅂ ㅅㅂ 거렸는지 모르겠다. 핵심 알고리즘은 백트랙킹이기는 한데.... 골드 2를 받은 이유는 그냥 구현이 빡셔서 그런것 같다. 굳이 백트리킹 말고, DFS와 BFS로도 해결이 가능할듯 하다. BFS/DFS 깊이가 커봤자 5라서... 지금 구현부분 코드만 봐도 삼중 for문에다가 삼중 if문을 사용... 해결 소스코드는 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

BOJ 12094 - 2048 (Hard) [내부링크]

2048(Easy) 문제와 근본적으로 같으나, 최대 횟수가 10이라는 점에서 달라졌다. 해결을 위해서는 다음이 필요하다 1. 2048(Easy) 코드의 최적화. 2. 백트랙킹 기법 사용 일단 1. 기존의 코드에서 getMax 부분을 최적화 했다. 새로 만든 setMax 함수로 미리 최대값을 계산한 후 up, down, left, right 멤버함수에 최댓값이 바뀔 수 있는 연산이 이루어 지는 경우 (그러니까 숫자가 합쳐지는 연산을 하는 경우) 최댓값을 갱신 할 수 있으면 갱신한다. 그리고 getMax는 그저 max 멤버변수를 반환한다. 다음으로 2. 이 부분은 생각하기 간단하다. 현재 행렬의 최댓값 > (기존의 최댓값 >> 현재 행렬의 남은 이동 횟수)가 참이면 이동을 계속, 아니라면 빠져나오게 해주면 된다. 또 up, down, left, right를 수행했는데도 행렬에 바뀐 부분이 없다면, 해당 방향으로는 들어가지 않게 해주면 된다. 해결 코드) 1 2 3 4 5 6 7 8 9

BOJ 5615 - 아파트 (feat. 밀러 라빈 소수 판정법) [내부링크]

교육 자료로 만들었던 ppt. 순서도를 그리면서 실수를 했는데, i++ 다음에 unsigned long long i = 0이 아니라, i < 12로 가야한다. 코드도 지금에 비해 좀 그런것 같고, 순서도도 썩 잘 그린편은 아닌것 같다... 1학년때 그린거라 그런가 사진이 원본이 아니라 잘 안보이면, 첨부 ppt를 가져가자

BOJ 1007 - 벡터 매칭 [내부링크]

https://www.acmicpc.net/problem/1007 1007번: 벡터 매칭 문제 평면 상에 N개의 점이 찍혀있고, 그 점을 집합 P라고 하자. 집합 P의 벡터 매칭은 벡터의 집합인데, 모든 벡터는 집합 P의 한 점에서 시작해서, 또 다른 점에서 끝나는 벡터의 집합이다. 또, P에 속하는 모든 점은 한 번씩 쓰여야 한다. 벡터 매칭에 있는 벡터의 개수는 P에 있는 점의 절반이다. 평면 상의 점이 주어졌을 때, 집합 P의 벡터 매칭에 있는 벡터의 합의 길이의 최솟값을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 구성되어있다. 테스트 케이... www.acmicpc.net 맨 처음 생각한 풀이법 : 20개의 점을 두 개씩 묶어서 계산한다. 그러나 이 방법은 O(20C2 * 18C2 * ... * 2C2)라는 무지막지한 시간복잡도가 생긴다. 다시 생각한 풀이법 : 고등학교 때 배운 수학지식을 이용. 이를