728x90

분류 전체보기 107

[이코테] 왕실의 나이트 - 파이썬

문제 행복 왕국의 왕실 정원은 체스판과 같은 8 X 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서 있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다. 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다. - 수평으로 두 칸 이동한 뒤, 수직으로 한 칸 이동 - 수직으로 두 칸 이동한 뒤, 수평으로 한 칸 이동 이처럼 8 X 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. 이 때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현한다...

[프로그래머스] level2 - 짝지어 제거하기 : 파이썬(Python) 풀이

문제 프로그래머스-짝지어 제거하기 : 파이썬 풀이 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 코드 def search(array, point): try: if(array[point] == array[point+1]): array.pop(point) array.pop(point) point = point-1 if point != 0 else 0 else: point += 1 except: pass return array, point def solution(s): s = list(s) if le..

[프로그래머스] level1 - 로또의 최고순위와 최저순위 : 파이썬(Python) 풀이

문제 프로그래머스 - 로또의 최고 순위와 최저 순위 - 파이썬 풀이 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 코드 def solution(lottos, win_nums): count = 0 zero = 0 a,b = 0,0 for i in lottos: if i == 0: zero += 1 elif i in win_nums: count += 1 b = 7-count if count != 0 else 6 a = 7-zero-count if zero != 0 ..

[프로그래머스] level1 - 신규 아이디 추천 : 파이썬(Python) 풀이

문제 프로그래머스 level1 신규 아이디 추천(파이썬) 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 코드 def solution(new_id): new_id = new_id.lower() # 2 ~ 3단계 new = [] new_id = list(new_id) check = 0 for i in new_id: if ((ord(i) >=97 and ord(i) = 48 and ord(i) = 16: new_id = new_id[:15] if new_id[-1] == '.': new_id = new_i..

[프로그래머스] level1 - 두 개 뽑아서 더하기 : 파이썬(Python) 풀이

문제 두 개 뽑아서 더하기 - 프로그래머스(파이썬) 코딩테스트 연습 - 두 개 뽑아서 더하기 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 programmers.co.kr 코드 def solution(numbers): answer = [] numbers = sorted(numbers) while(len(numbers) != 1): first = numbers.pop(0) for i in numbers: answer.append(first + i) return sorted(list(set(answer))) 풀이 간단한 문제였다. 이보..

4. 자연어 처리 - Word Embedding(WordNet)

Word Sense 한글 단어들은 동음이의어가 참 많다. '차' 를 예로 들어보자. 잎이나 뿌리 등을 우려 마시는 것 바퀴가 달린 운송수단 짐을 실어 그 분량을 세는 단위 장기 말 중 '車' 빼기의 다른 말 몇 주차... 등의 기간을 나타내는 말 etc... 이 때문에 우리는 다의어(Polysemy)와 동형어(Homonym)를 알아야 한다. 다의어(Polysemy) : 근본의미 이외에도 다른 뜻으로도 쓰는 단어 동형어(Homonym) : 단어의 형태만 같을 뿐 서로 전혀 다른 의미를 지님 이런 경우를 처리하기 위해 필요한 것이 Word Sense Disambiguation(WSD) 이다. WordNet 어휘 분류 사전 상위어(Hypernym)나 하위어(Hyponym)에 대한 것이 잘 정리되어 있는 것이 ..

3. 자연어 처리 - 텍스트 유사도(n-gram, 코사인 유사도)

각 문장 간의 의미가 유사한지 컴퓨터는 어떻게 계산할까요? 여기에서 사용되는 개념은 "텍스트 유사도"라고 합니다. n-gram 유사도 n-gram 유사도에서 "n-gram" 이란 기존 문장이 있을 때 n 개의 연속적인 단어 나열을 의미합니다. n 개의 토큰들이 있다는 의미와 같습니다. 이전 게시물인 Subword Segmentation 과 비슷한 양상이라고 볼 수 있습니다. pair 별 빈도를 이용하여 유사도를 계산합니다. 만약 "12월 철수는 패딩을 구입하러 상점으로 이동했다" 라는 문장과 "12월 철수는 패딩을 환불하러 백화점으로 이동했다" 라는 문장의 유사도를 알고 싶다면 단어별로 분절하여 pair 별로 빈도를 확인합니다. 그리고 비교하고자 하는 문장과 같은 pair 가 있는지 확인하고 그 개수를 ..

2. 자연어 처리 - Subword, BPE 알고리즘(OoV, UNK)

SubWord Subword 란 단순한 단어 하나에도 작은 의미들이 뭉쳐있어 있는데 그 단위를 말하는 것이다. 한국어 단어를 예시로 들면 "집중"은 직역하는 [가운데] 로 [모은다] 라는 두가지 의미를 담고 있다. 그래서 자연어 처리를 할 때 이런 작은 단위들로 분절하여 의미를 둔다면 더 좋은 성능을 발휘할 것이다. 하지만 우리 머리로는 뜻이 나오지만 컴퓨터가 Subword 단위까지 분절하기 위해서는 subword 사전같은 데이터들이 필요할 것이다. BPE(Byte Pair Encoding) 알고리즘 2015년에 발표한 것으로 압축 알고리즘을 이용하여 subword segmentation 을 제안했다. 학습 코퍼스를 이용하여 BPE 모델을 학습한 뒤, 실제 코퍼스에 적용해보는 것이다. 이 알고리즘을 활용..

자연어 처리 기초 - 정규표현식 알아보기(정리, 실습편)

Regular Expression 데이터 정제에 필요한 기술 중에 하나가 정규식(정규표현식)이다. 이전 게시물에 보았던 전각문자를 반각문자로 바꾸는 데에도 주로 사용되는 기술이다. Regular Expression 을 사용하는 방법은 크게 두가지가 있다. Text Editor (VSCode, Sublime Text...) Python 등을 활용한 모듈 사용 이제 정규식의 첫 걸음을 시작해보자. [ ] 대괄호이다. 정규식에서 가장 많이 쓰이는 기호 중에 하나이다. 대괄호 안에 있는 문자(숫자 등)를 매칭해준다. 만약 정규식이 [ab279] 라고 설정 되어있을 때 'a', 'b', '2', '7', '9' 중에 하나라도 들어가있는 문장은 매치에 성공한다. 대괄호 안에 문자 및 숫자들만이 아니라 기호들이 다양..

1. 자연어 처리(NLP, NLU, NLG) - 수집, 정제, tokenization

# 자연어(Natural Language)란 무엇일까. 위키피디아에 따르면 사람들이 일상생활에 쓰는 언어를 인공적으로 만들어진 언어와 구분하여 쓰는 말이라고 되어있다. # 그렇다면 NLP(Natural Language Processing) 은 무엇일까. NLP 에는 크게 NLU 와 NLG 로 이루어져 있다. NLU : 자연어를 컴퓨터가 이해할 수 있는 값으로 바꾸는 과정 NLG : 컴퓨터가 이해한 값을 사람이 이해할 수 있도록 바꾸는 과정 내가 공부하는 자연어 처리는 딥러닝을 기반으로 한다. 자연어 처리 과정은 다음과 같다. 자연어 처리에서 흔히 아는 것 중 하나는 "감정 분석" 이다. 문제 정의 단계에서는 무엇을 할 것인지에 대해서 정하는 단계인데 '나는 감정 분석을 구현해보겠다.' 라고 생각한다면 그..

728x90