본문 바로가기

분류 전체보기

(10)
Cis-AB형의 유전 시뮬레이션 [Python] Cis-AB형이란?ABO식 혈액형은 세개의 대립유전자 A, B, O에 대한 복대립 유전이다. 당연히 정상적인 경우에 세개의 유전자가 같은 염색체 위에 있을 일은 없다. 하지만 Cis-AB형은 A,B 형을 나타내는 대립유전자가 같은 염색체 위에 존재하는 돌연변이다. Cis-AB형 유전자를 가진 사람은 먼저, A,B 유전자가 둘다 있고, 상동염색체에 있는 다른 유전자까지 고려하여 우열 관계에 맞게 표현형을 나타낸다. 예를 들면 Cis-AB/O 형인 사람은 AB형, Cis-AB/A인 사람은 AB형이다. 위와 같은 규칙으로 사람의 ABO식 혈액형 유전을 시뮬레이션하였다. 사실 Cis-AB형이 아니더라도 정상 혈액형을 가진 집단에 대해서도 유전을 시뮬레이션 할 수 있게 구현하였다.시뮬레이션 코드 구현먼저 라이브러..
RSA 알고리즘 뚫기 [Python] 도입 - RSA의 등장 배경RSA란 1977년 리베스트(R), 샤미르(S), 애들먼(A) 이 개발한 공개키 암호 알고리즘이다. 공개키 암호란 암호를 만들거나 푸는데 사용하는 "키" 의 일부를 공개하는 방법이다.간단히 좀더 자세하게 설명해보겠다. 먼저 가장 간단한 암호체계를 소개한다. 알파벳을 몇개씩 밀어서 암호를 만드는 방법(카이사르 암호)은 들어본 적, 혹은 간단히 떠올려본 적 있을것이다. "good" 이라는 단어에서 알파벳을 하나씩 뒤로 밀면 "hppe"가 된다. 이 암호 체계의 본 상황에서는 "한"칸씩 알파벳을 밀었기에 키 k=1이라고 할 수 있다. 알파벳을 A부터 Z까지 0~25에 대응시킨다면 평문 P를 암호문 C로 바꾸는 상황(암호화), 암호문 C를 평문 P로 바꾸는 상황(복호화) 는 아래와 같..
인공지능 사용분야 현재 인공지능은 많은 연구를 통해 폭발적으로 성능이 향상되며 많은 분야에서 사용되고 있다. 이 글에서는 이러한 인공지능의 사용 분야와 사용되는 인공지능 기술을 정리한다.  AI타임스의 기사를 참고하여 작성하였다. [https://www.aitimes.com/news/articleView.html?idxno=144027 ] 1. 자율 주행 기술자율주행 차량은 많은 센서와 카메라를 이용해 차량을 제어하며 주행하는 임무를 수행한다. 사물을 인식하는 과정에서 CNN(합성곱 신경망)을 사용한 이미지 분석이 포함된다.또한 자율주행 차량은 인식한 교통상황에 대응하는 방법을 학습하고 실시간 의사 결정을 내리면서 지속적으로 개선된다. 이러한 과정을 자율 주행 모델은 시뮬레이션 상에서 강화학습을 이용해 학습하게 된다. 테..
BOJ 5615 아파트 임대[C++] 먼저 문제에서 주어진 식을 변형해야 한다. 아파트의 면적을 n이라 놓으면 2xy + x + y = n. 양변에 2를 곱하고 1을 더하면 4xy + 2x + 2y + 1 = 2n + 1. 좌변을 인수분해하면 (2x + 1)(2y + 1) = 2n + 1. 문제에서는 불가능한 아파트 면적을 찾는 것이다. x,y의 조건에서 2x+1, 2y+1모두 3이상의 홀수이고 이때 가능한 2n + 1 값은 3이상의 홀수 두개로 소인수분해된다. 즉 불가능한 2n + 1값은 3이상의 홀수 두개로 소인수분해 되지 않는 수인데, 2x + 1 과 2y + 1은 짝수가 나올 수 없으므로 둘 중 하나가 3보다 작은 홀수, 즉 1이다. 따라서 2n +1 의 값이 1 x (1이 아닌 홀수) 로만 인수분해 할 수 있는 수 즉 소수가 될때,..
BOJ 3665 최종 순위 [C++] 위상정렬 문제이다. 하지만 문제에서 주어진 입력에서 각 팀 사이의 관계를 추출하는 것이 어려웠다. #include using namespace std; int main() { int tt; cin >> tt; for (int ttt = 0; ttt > n; vector same(n + 1,true); vector next[501], pre(n + 1), temp; map rank,high,low; for (int i = 0; i > buf1; temp.push_back(buf1); rank[buf1] = i + 1; low[buf1] = i + 1; high[buf1] = i + 1; } cin >> ..
BOJ 16566 카드 게임 [C++] 규칙이 길고 복잡해 보이지만, 사실 별거 없는 문제다. 규칙에서 문제 풀이에 필요한 정보만 추출해내면, 철수는 1~N까지 숫자가 적힌 카드중 아무거나 낼 수 있다. 민수는 철수의 카드보다 큰 숫자가 적힌 카드를 내야한다. 문제 입력은 첫째줄에 n, m(민수 카드 개수), k(철수가 내는 카드 개수)가 주어지고 둘째줄에 민수의 카드, 셋째줄에 철수의 카드가 주어진다. 출력은 철수의 각각 카드에 대한 것이므로 k개 줄에 걸친다. 민수의 카드중 철수의 특정 카드보다 큰 카드를 파악하기 위해서는 먼저 민수 카드의 배열을 정렬해야한다. 그리고 철수 카드보다 큰 카드의 위치를 알려줄 것인데, 이때는 앞에서부터 차례대로 탐색하는 방법이 있지만 이는 시간복잡도가 최대 O(M)에 달할 수 있어 비효율적이다. 따라서 이분..
BOJ 9328 열쇠 [C++] 또한 빡센 구현, 시뮬레이션 문제이다. 요즘 문제가 어려워질수록 구현 자체의 난이도도 높아지는 듯 하다. 이 문제는 특히 문자를 사용해서 손도 대기 꺼리게 만드는 것 같다. 먼저 시간복잡도는 고려하지 않아도 된다. 완전탐색도 아니고 문제 사이즈도 작은데다, bfs자체가 그리 오래걸리지 않는다. 아래 코드로 8ms 소비하여 AC를 받았다. 문제는 먼저 건물 지도를 입력받는다. 입력받을 때 문이 있다면, 그 문의 좌표를 문의 종류에 맞는 doors라는 벡터에 삽입해준다. 상근이에게 처음 주어진 열쇠는 종류에 맞는 문이 존재한다면 그 문을 모두 연다. 당장 문에 도달하지 못한다고 해도 추후에 그 문에 도달하면 문을 열 것이므로 그냥 다 연다. 여기서 효율성을 좀더 높이려면 열린 문은 벡터에서 빼버려도 된다. ..
BOJ 17387 선분 교차 2 [C++] 까다롭고 복잡한 문제다. 그리고 문제를 푸는 핵심 개념이 ccw라는 것인데 함수에 이런 값을 넣으면 이렇게 튀어나오는구나 정도만 이해했지 공식 내용은 이해하지 못했다. 그래서 선형대수학 공부를 좀 하려한다. 아무튼 ccw함수는 (2차원이라 가정) 세점 p1, p2, p3를 입력받으면 p1, p2, p3로 가는 경로가 시계방향이면 -1, 반시계는 1, 직선이면 0 을 반환하는 함수다. 이것을 4번하고 곱하고 비교해서 두 직선이 평행하지 않을때 교차 여부는 입력된 4개의 좌표의 값들을 ccw만 돌리고 직접 대소비교하지 않고도 쉽게 판단할 수 있다. 하지만 평행할때는 좀 까다롭다. 내가 놓쳐서 헤맸던 가장 큰 것이 입력시 x1 < x2, x3 < x4, y1 < y2, y3 < y4가 보장되지 않는다는 것이다..