분류 전체보기
[알고리즘] 🤷♂️ 완전 탐색 알고리즘 / exhaustive search algorithm
[알고리즘] 🤷♂️ 완전 탐색 알고리즘 / exhaustive search algorithm
2019.02.15출제 빈도 높음 평균 점수 낮음 🤷♂️ 완전 탐색 알고리즘(exhaustive search algorithm)?PS(Problem Solving)을 하는 데 가장 간단하고 쉬운 방법이 무엇일까요? 답은 가능한 경우를 다 해보는 것입니다. 이게 무슨 알고리즘이야? 할 수 있겠지만, 이것도 알고리즘에 일종입니다. 전산학에서는 이를 무식하게 푼다라는 뜻의 Brute-force라 하고, 전체를 확인한다고 해서 완전 탐색 알고리즘(exhaustive search algorithm)이라고 합니다. 👉 어디에 쓰이는가?하지만 대부분의 문제들은 시간 초과등의 이유로 완전 탐색으로 풀리지 않습니다. 하지만 어려운 알고리즘을 생각할 필요 없이 완전 탐색으로 풀리는 문제도 있으며, 가끔 어려운 완전 탐색 문제도 존재합니다..
[프로그래머스] 👨🏫 가장 큰 정사각형 / Python
[프로그래머스] 👨🏫 가장 큰 정사각형 / Python
2019.02.15👨🏫 가장 큰 정사각형 문제 풀어보기 😃 나의 코드 def solution(board): width = len(board[0]) height = len(board) for x in range(1,height): for y in range(1,width): if board[x][y] == 1: board[x][y] = min(board[x-1][y-1], min(board[x-1][y], board[x][y-1])) + 1 return max([item for row in board for item in row])**2 이 문제를 완전 탐색(Brute-force)으로 푼다고 생각해봅시다. board의 모든 인덱스를 확인해야하고, 정사각형이 가장 작은 1부터 최대 크기의 정사각형까지 확인하게 된다면 시간 ..
[프로그래머스] 👩🏫 행렬의 곱셈 / Python
[프로그래머스] 👩🏫 행렬의 곱셈 / Python
2019.02.15👩🏫 행렬의 곱셈 문제 풀어보기 😃 나의 코드 def solution(arr1, arr2): answer = [] for idx1 in range(len(arr1)): row = [] for idx2 in range(len(arr2[0])): tmp = 0 for idx3 in range(len(arr1[0])): tmp += arr1[idx1][idx3] * arr2[idx3][idx2] row.append(tmp) answer.append(row) return answer 제한 조건에서 곱할 수 있는 배열만 주어진다고 했으니, 두 배열을 A X B, B X C로 해보겠습니다. 그리고 두 행렬의 곱으로 나온 배열의 크기는 A X C가 될 것입니다. 결과 배열의 왼쪽 위부터 오른쪽 아래까지 만들어 나가..
[프로그래머스] ☎ 전화번호 목록 / Python
[프로그래머스] ☎ 전화번호 목록 / Python
2019.02.14☎ 전화번호 목록 문제 풀어보기 😃 나의 코드 def solution(phone_book): phone_book.sort() for prefix_idx, prefix_phone in enumerate(phone_book): for target_phone in phone_book[prefix_idx+1:]: if prefix_phone == target_phone[:len(prefix_phone)]: return False return True 우선 일반적인 풀이입니다. 먼저 해야할 것은 phone_book에 사전 작업으로 사전형으로 정렬해줍니다. 이렇게 정렬하게 되면 절대로 특정 인덱스 앞은 특정 인덱스의 prefix가 될 일이 없기 때문에 시행을 조금이나마 줄여줍니다. 같은 O(n^2)의 시간 복잡도이..
< 그때 그 시절 패밀리 > 가족을 반대로 하면
< 그때 그 시절 패밀리 > 가족을 반대로 하면
2019.02.14요새 매일 한 편씩 보고 있는 넷플릭스 시리즈입니다. 원 제목은 입니다. 제목부터 좀 쎄보이죠 한국 제목은 라는 이름으로 많이 순화되었습니다. 같은 제목은 어땠을까하네요. 1970년대의 미국을 배경으로한 성인 만화입니다. 가족들이 등장하는 만화라는 점에서 을 생각하셨을 수도 있지만, 성인이 타겟인 만큼 수위가 더 높습니다. 그래서 좀 더 현실적으로 보이기도 합니다. 주인공인 머피는 스탠드업 코미디로 잘 알려진 빌 버가 더빙을 진행했습니다. 빌 버는 이 만화에 제작에도 참여해, 스토리를 보다보면 빌 버의 향기가 진하게 베어나옵니다. 게다가 머피는 한국군 참전 용사라는 게 에피소드 내내 강조됩니다. 물론 좋..
[프로그래머스] 👷♀️ 쇠막대기 / Python
[프로그래머스] 👷♀️ 쇠막대기 / Python
2019.02.14👷♀️ 쇠막대기 문제 풀어보기 😃 나의 코드 def solution(arrangement): answer = 0 arrangement = arrangement.replace("()","L") stack = [] for idx, c in enumerate(arrangement): if c == '(': stack.append('(') answer += 1 elif c == ')': stack.pop() else: answer += len(stack) return answer 스택/큐 알고리즘 카테고리에 속한 문제입니다. 이 문제는 스택을 이용해 풀어야합니다. 우선 레이저에 해당하는 ()를 (과 )이 아닌 다른 문자 하나로 바꾸줍니다 여기서는 Lazer에 해당하는 L로 바꿔주었습니다. stack라는 lis..
[프로그래머스] 🧱 프렌즈 4 블록 - [1차] 2018 카카오 블라인드 채용 / Python
[프로그래머스] 🧱 프렌즈 4 블록 - [1차] 2018 카카오 블라인드 채용 / Python
2019.02.14🧱 프렌즈 4 블록 문제 풀어보기 😃 나의 코드 dx = [0, 1, 0, 1] dy = [0, 0, 1, 1] def safe(width, height, c_idx, r_idx): for x, y in zip(dx,dy): if width-1 < x+c_idx or x+c_idx < 0 or height-1 < y+r_idx or y+r_idx < 0: return False return True def del_check(board, c_idx, r_idx): square_set = set() for x, y in zip(dx,dy): square_set.add(board[y+r_idx][x+c_idx]) if len(square_set) == 1 and square_set != {" "}: retur..
[프로그래머스] 👩💼 뉴스 클러스터링 - [1차] 2018 카카오 블라인드 채용 / Python / KAKAO BLIND RECRUITMENT
[프로그래머스] 👩💼 뉴스 클러스터링 - [1차] 2018 카카오 블라인드 채용 / Python / KAKAO BLIND RECRUITMENT
2019.02.14KAKAO BLIND RECRUITMENT 👩💼 뉴스 클러스터링 문제 풀어보기 😃 나의 코드 import re from collections import Counter as mset p = re.compile("[a-z]{2}") def multiSet(str): lst = [] for idx in range(len(str)-1): if p.match(str[idx:idx+2]): lst.append(str[idx:idx+2]) return lst def solution(str1, str2): lst1 = multiSet(str1.lower()) lst2 = multiSet(str2.lower()) len_lst1 = len(lst1) len_lst2 = len(lst2) if len_lst1 == 0..
🧘♂️ 선택과 집중을 위한 만다라트(Mandal-Art)를 만들어 보자
🧘♂️ 선택과 집중을 위한 만다라트(Mandal-Art)를 만들어 보자
2019.02.14🧘♂️ 만다라트(Mandal-Art)만다라트 기법은 일본의 디자이너 '이마이즈미 히로아키'가 구상한 기법으로, Manda(본질의 깨달음) + la(달성 및 성취) + art(기술)의 합성어로 본질을 깨닫는 기술, 목적을 달성하는 기술을 뜻합니다. 가장 큰 주제 및 목표를 세우고 이에 대한 해결법, 아이디어, 생각들을 확산해 나가는 형태로, 생각을 더욱 쉽게 정리하고 한 눈에 조합하여 확인할 수 있어 목표를 관리하는 데 도움을 줍니다. 일본의 괴물투수 오타니 쇼헤이가 고등학교 1학년때 세워놓은 만다라트 계획표로 유명해졌으며, 저도 이 덕분에 만다라트를 접하게 되었습니다. 만다라트 표는 9 x 9 표로 총 81칸을 가지고 있습니다. 실제 칸을 채워가는 방식은 다음과 같습니다. 자신의 핵심 목표를 가장 중심..
[Node.js] 🤷♂️ npm(Node Package Manager)이 뭐길래?
[Node.js] 🤷♂️ npm(Node Package Manager)이 뭐길래?
2019.02.14🤷♂️ npm? npm은 Node Package Manager의 약어로 JavaScript를 위한 패키지 관리자입니다. JavaScript Runtime 환경의 Node.js의 그 Node입니다. 세계 최대의 소프트웨어 창고 npm은 세계 최대의 소프트웨어 창고로 80만개가 넘는 코드 패키지를 가지고 있습니다. 오픈소스 개발자들은 npm을 이용하여 그들의 소프트웨어를 공유합니다. 많은 회사들도 npm을 이용하여 사적인 개발을 진행하곤 합니다. SO EAAAAAASY npm은 자유롭게 사용 가능합니다. 퍼블릭한 소프트웨어 패키지들을 어떠한 가입이나 로그인 없이 모두 다운로드할 수 있습니다 CLI 이용 npm은 소프트웨어를 다운로드하거나 설치하기 위해 사용되곤하는 CLI(Command Line Client..
[프로그래머스] 👨💻 캐시 - [1차] 2018 카카오 블라인드 채용 / Python
[프로그래머스] 👨💻 캐시 - [1차] 2018 카카오 블라인드 채용 / Python
2019.02.13👨💻 캐시(cache) 문제 풀어보기 😃 나의 코드 def solution(cacheSize, cities): time = 0 cache = [] cities = [city.lower() for city in cities] if cacheSize != 0: for city in cities: if city in cache: cache.pop(cache.index(city)) cache.append(city) time += 1 else: if len(cache) < cacheSize: cache.append(city) time += 5 else: cache.pop(0) cache.append(city) time += 5 else: time += len(cities) * 5 return time 우선 이 ..
[네트워크] 🤷♂️ DNS가 뭐길래
[네트워크] 🤷♂️ DNS가 뭐길래
2019.02.12어제 오늘 정부의 HTTPS/DNS 차단으로 떠들석합니다. 기사에는 HTTPS, DNS, Packet같은 여러가지 전문 용어들이 등장하는데요, 과연 어떤 의미인 지 알아보기로 했습니다. 우선 DNS에 대해 알아봅시다. 우리가 주소창에 www.youtube.com을 쳤을 때, 크롬이나 파이어 폭스같은 브라우저는 저 이름에 해당하는 Domain Name이 아닌 우리가 가려는 사이트의 정보를 담고 있는 서버의 IP Address를 알아야합니다. 그리고 이 과정에서 DNS가 등장합니다. DNS(Domain Name System) DNS는 TCP/IP Network에서 사용하는 시스템 서비스으로 영문/한글 주소를 IP Network에서 찾아갈 수 있는 IP Address로 변환해 줍니다. 마치 과거에 모든 사람의..