목록분류 전체보기 (124)
minhui study
https://www.acmicpc.net/problem/10162 10162번: 전자레인지 3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은 �� www.acmicpc.net t=int(input()) a = b = c = 0 if t%10 != 0: print(-1) else: a = t // 300 b = (t%300)//60 c = ((t%300)%60)//10 print(a, b, c) #include using namespace std; int main() { // A : 300초, B : 60초, C : 10초 int a, b, c = 0; i..
https://www.acmicpc.net/problem/1138 1138번: 한 줄로 서기 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 � www.acmicpc.net 키가 작은 사람부터 result에 넣고 0의 갯수로 자신보다 키 큰 사람이 왼쪽에 몇 명 있는지 파악한다. n = int(input()) c = list(map(int, input().split())) # 2100 result=[0 for i in range(n)] # 0000 for i in range(n): a = c[i] cnt = 0 for j in range(n): if cnt..
https://www.acmicpc.net/problem/2529 2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제�� www.acmicpc.net 0~9 숫자 중 중복 없이 부등호 기호에 만족하는 문자열을 만들어야 한다. 그리고 0 > 2 < 3 .... 경우 0뒤부터는 조건에 맞지 않으므로 더 이상 숫자를 넣을 필요없이 다른 경우로 넘어가면 된다. 그리고 0부터 시작하므로 가장 첫번째로 완성된 문자열은 최솟값이고 가장 마지막에 만든 문자열이 최댓값이다. 문자열이 생성되는 과정을 설명하자면 첫번째가 0이면 0은 이미 사용했으므로 c[0]을 True값으..
https://www.acmicpc.net/problem/1969 1969번: DNA 문제 DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클 www.acmicpc.net 첫 줄에 DNA의 수 N과 문자열의 길이 M이 주어진다. 그리고 둘째 줄부터 N+1번째 줄까지 N개의 DNA가 주어진다. (N은 1,000보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다.) Hamming Distance합이 가작 작아야하므로 각 DNA의 특정 위치 문자들만 추출하여 A, C, G, T와 비교한 후 A, C, G, T..
문제의 힌트는 Pyjail Challenge이다. 리눅스에 nc ctf.no-named.kr 9009를 입력하면 다음과 같이 나온다. 일부러 오류가 나도록 이것저것 쳐보니 다음과 같은 오류가 나왔고 오류 내용에서 이 실행 파일은 pyjail.py이라는 것과 그 파일의 위치가 /home/pyjail/pyjail/이라는 것을 알 수 있었다. 또한 오류 내용을 보니 사용자가 입력한 내용이 eval함수로 들어가는 듯 보였다. 파이썬에서 eval()함수는 받은 해당 표현식을 그대로 실행하는 취약점이 있기 때문에 __import__(‘os’).system(‘ls’)와 같은 쉘 명령을 실행시킬 수 있는 명령어를 입력했을 때 다음과 같이 해당 서버의 디렉토리 목록이 출력되는 것을 확인할 수 있었다. 이를 이용하여 /h..
이번에는 문장 자동 생성을 해보자. 마르코프 체인과 LSTM/RNN은 서로 다른 방식의 문장 생성 방법으로 마르코프 체인은 확률을 기반으로 문장을 이어 붙여 나가는 방법이며, LSTM/RNN은 머신러닝으로 다음에 위치할 문장을 예측해서 문장을 생성하는 방법이다. 마르코프 체인이란? 마르코프 체인은 마르코프 성질을 지닌 이산 확률 과정을 의미하며 이를 이용하면 기존 문장을 기반으로 문장을 자동으로 생성할 수 있다. 마르코프 성질(Markov property)이란 과거의 상태를 무시하고, 현재의 상태만을 기반으로 다음 상태를 선택하는 것을 의미한다. 예를 들어 현재 상태를 q라고 표현했을 때 다음 상태 p로 이동할 확률은 현재 상태와 다음 상태만을 기준으로 결정되므로 P( q | p )이다. 또한 마르코프 ..
이번에는 레벤슈타인 거리 계산과 n-gram을 사용해 단어 또는 문장의 유사도를 분석하는 방법을 알아보자 레벤슈타인 거리 "레벤슈타인 거리(Lvenshtein distance)"는 두 개의 문자열이 어느 정도 다른지를 나타내는 것이다. 이를 "편집 거리(Edit Distance)"라고도 부른다. 철자 오류 수정, 비슷한 어구 검색 등에 사용되고 있는데 의학 분야에서는 DNA배열의 유사성을 판단할 때도 사용하고 있다. 예를 들어 "가나다라"와 "가하마라"는 얼마나 비슷할까? 레벤슈타인 거리는 "가나다라"를 "가마바라"로 편집할 때 몇 번의 문자열 조작이 필요한지에 주목해서 단어의 거리를 구한다. 횟수 편집 조작 결과 0 - 가나다라 1 "나"를 하"로 변환 가마다라 2 "다"를 "마"로 변환 가마바라 이처..
MLP로 텍스트 분류하기 MLP(Multi Layer Perception, 다층 퍼셉트론)는 입력층과 출력층 사이에 각각 전체 결합하는 은닉층을 넣은 뉴럴 네트워크이다. 여기서 중요한 점은 텍스트 데이터를 숫자로 표현할 수 있는 벡터로 변환한다는 것이다. 머신러닝 프레임워크는 글을 그대로 입력할 수 없으므로 텍스트 데이터를 숫자로 변환해야 한다. 또한 텍스트 데이터는 이미지 데이터와 다르게 길이가 다른데 이를 고정된 길이의 벡터로 어떻게 변환할 수 있는지 살펴보자 즉, 가장 기본적인 형태의 인공신경망 구조이며, 하나의 입력층(input layer), 하나 이상의 은닉층(hidden layer),그리고 하나의 출력층(output layer)로 구성된다. MLP는 층의 갯수(depth)와 각 층의 크기(wi..