-
백준 3986번 좋은 단어 [Stack] :: 마이구미알고리즘 풀이/스택, 큐 2017. 1. 16. 21:00
이번 글은 백준 알고리즘 3986번 "좋은 단어" 를 다뤄본다.이 문제는 스택을 통해 접근하는 문제이다.백준 3986번 좋은 단어 - https://www.acmicpc.net/problem/3986 평석이는 단어 위로 아치형 곡선을 그어 같은 글자끼리(A는 A끼리, B는 B끼리) 쌍을 짓기로 하였다. 만약 선끼리 교차하지 않으면서 각 글자를 정확히 한 개의 다른 위치에 있는 같은 글자와 짝 지을수 있다면, 그 단어는 '좋은 단어'이다. 평석이가 '좋은 단어' 갯수를 세는 것을 도와주자. 문제만 보면, 바로 쉽게 이해하기는 힘들 수 있다.먼저 예를 통해 문제를 이해해보자.ABAB 주어졌을 경우를 보자.1. ABAB => A와 A 위로 아치형 곡선을 그린다.2. ABAB => B와 B 위로 아치형 곡선을 ..
-
백준 2156번 포도주 시식 [DP] :: 마이구미알고리즘 풀이/동적계획법 2017. 1. 16. 21:00
이번 글은 백준 알고리즘 문제 2156번 "포도주 시식" 을 다뤄본다.일단 문제를 보자. 1. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다.2. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다. 효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해야 할지 고민하고 있다. 1부터 n까지의 번호가 붙어 있는 n개의 포도주 잔이 순서대로 테이블 위에 놓여 있고, 각 포도주 잔에 들어있는 포도주의 양이 주어졌을 때, 효주를 도와 가장 많은 양의 포도주를 마실 수 있도록 하는 프로그램을 작성하시오. 6, 10, 13, 9, 8, 1 주어졌을 때, 6, 10, 9, 8 을 고르면 최대의 양 33이 정답이 된다. 이 문제..
-
백준 1912번 연속합 [DP] :: 마이구미알고리즘 풀이/동적계획법 2017. 1. 15. 23:50
이번 글은 백준 알고리즘 1912번 문제 "연속합" 을 다뤄본다.일단 문제를 보자.n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 숫자를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 숫자는 한 개 이상 선택해야 한다.예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.문제는 쉽게 이해할 수 있다.연속되는 수들을 골라 최대의 합이 되는 수를 고르면 된다. 사이트에서 알고리즘 분류를 보면 알다시피 동적계획법으로 풀기를 권장하는 문제이다. 어떻게 점화식을 만들 수 있을까?점화식에 앞서 함정만 파악하면 쉽게 문제를 풀 수 있다. 임의의 수열 7 8 -9 10..
-
Github 다수 계정을 위한 SSH key 설정 :: 마이구미GitHub 2017. 1. 14. 21:40
이번 글은 하나의 서버에서 Github 계정을 둘 이상 사용할 수 없는 이슈에 대해 해결 방안을 다뤄본다.이번에 private 저장소를 만들어서 개발서버를 셋팅하는 과정에서 얻은 무식함과 깨달음으로 진행해본다. 먼저 본인의 환경을 설명하겠다.개발서버는 cafe24의 가상서버호스팅을 이용하고 있다.오로지 실서버에 올리기 전 테스트만 하는 용도로 쓰고 있다. 또한 개발서버를 개인적인 공부를 위해서도 사용하고 있다.이러한 개인적인 공부는 Github의 public 저장소를 이용하고 있다.개인적인 개발은 Github으로 관리하고, 업무에 있어서는 Github을 사용을 안하는 것인가?그렇다...지방에서 Github을 바라는 건 사치인 것 같다. (서울 사람인척 하는 거 같아서 말함. 서울에서 8개월 밖에 일 안했..
-
선택 정렬이 불안정 정렬인 이유 :: 마이구미알고리즘 2017. 1. 13. 00:07
이번 글은 선택 정렬이 불안정 정렬인 이유에 대해 다뤄본다.그에 앞서 증명을 위해 버블 정렬, 선택 정렬, 삽입 정렬을 언급하겠다. 3가지를 드는 이유는 특별한 건 없다.단지 가장 구현하기 쉽고, 이해하기 쉬운 정렬이기 때문이다.(세가지 모두 시간 복잡도는 O(n^2) 이다.) 버블 정렬 선택 정렬 삽입 정렬세가지 정렬은 어렵지 않기 때문에 위키의 도움을 빌리겠다. 안정 정렬과 불안정 정렬이라는 말을 들어봤을 것이다.안정 정렬 - 동일한 값에 대해 기존의 순서가 유지되는 정렬 방식 ( 버블 정렬, 삽입 정렬 )불안정 정렬 - 동일한 값에 대해 기존의 순서가 유지되지 않는 정렬 방식 ( 선택 정렬 )위와 같이 무슨 뜻인지만 알고 있는 경우가 많다.왜? 질문을 던지면 선뜻 증명을 못하면 문제가 있다.많은 글..
-
클라이언트 로그인 암호화 보안 :: 마이구미HTTP 2017. 1. 10. 21:30
이번 글은 로그인 암호화 관련 주제를 다뤄본다. 기본적으로 로그인을 하기위해서는 아이디와 패스워드를 입력한다.패스워드는 * 표시가 되어 노출되지 않는다.그렇기에 사용자는 당연히 패스워드가 안전하다고 생각한다. 로그인의 경우는 대부분 form이나 ajax를 통해 서버에 전송하게 구현되었다.단순히 http 프로토콜을 쓰고 있거나, http를 쓰면서도 암호화가 되어있지 않다면 서버에 요청하는 정보는 아래와 같이 노출된다. 보이는가? 개발자 도구에서 확인해본 결과, 입력한 패스워드 1234 그대로 노출되었다.데이터가 평문으로 전송되는 취약점으로 인해 스니핑과 같은 보안 위협을 받을 수 있다.이와 같은 웹 페이지가 현재 많이 존재한다. 트래픽이 높지 않고, 유명하지 않아서 보이지 않을 뿐이다. 해결 방안으로는 2..
-
헤더 정보 누출 보안 취약점 :: 마이구미HTTP 2017. 1. 9. 21:07
이번 글은 헤더에 노출되는 값들을 다뤄본다.헤더의 특정 정보들은 노출되면 보안 취약점으로 판단됨으로써, 조치 명령을 받을 수 있다.보안 취약점과 관련된 헤더의 Server와 X-Powered-By 정보에 대해 알아볼 것이다. 웹 페이지의 헤더 정보는 개발자 도구에서도 확인 가능하고, 프록시 툴에서도 확인할 수 있다. 위 이미지를 보면 특정 웹 페이지의 헤더 정보들을 볼 수 있다. Server : Microsoft-IIS/7.0X-Powered-By: PHP/5.5.30Server는 서버의 종류이자 버전이다.X-Powered-By는 어떤 기술로 개발되었는 것이라고 생각하면 된다. 보안을 위협하는 입장에서는 위의 서버의 정보들을 활용해서 서버에 해당하는 취약점들을 더 확실히 알고 보안을 위협할 수 있게 해주..
-
[nodejs] redis session 저장소 관리 :: 마이구미Nodejs 2017. 1. 8. 14:54
이번 글은 redis 서버를 통한 세션 관리를 다뤄본다.nodejs의 express 프레임워크를 사용하여 예제를 진행한다. 현재 NoSQL의 일종으로 redis는 많은 목적으로 활용되고 있다.redis란 무엇인가? 위키의 정의를 보자. 레디스(Redis)는 오픈 소스이며 네트워크화, 인메모리 데이터베이스, 선택적 영구성 키-값 데이터 저장소이다. 레디스의 개발은 2013년 5월부터 Pivotal의 지원을 받고 있으며, 그 전에는 VMWare의 지원을 받았다. DB-Engines.com의 월간 랭킹에 따르면, 레디스는 가장 인기 있는 키-값 저장소이다.* 인메모리 데이터베이스(In-Memory Cache) - I/O 성능을 위해 데이터를 메모리에 적재하는 데이터베이스 redis를 들어봤다면 "빨라. mys..