분류 전체보기(301)
-
비동기 처리가 효율적일까?
운영체제 같은 시스템 관련 수업이나, 웹 프로그래밍 실습에서나 비동기는 동기 프로그래밍보다 절대적인 우위는 아니나 보통 리소스의 유휴시간을 줄이면서 효율적이라고 하는 편이다. 이를 철썩 같이 믿고 이번에 회사에서 FIFA Open API를 활용한 개인 과제에서 파이썬 비동기 라이브러리인 asyncio로 API를 만들다가 의문이 들었다. 정말로 비동기처리가 효율적일까? 실제로 팀원님들도 리뷰 시간에 내 코드를 보고 그러한 의문을 남겨주셨고, 궁금한 마음에 이에 대한 테스트와 분석을 시작해보았다. 지금까지 비동기의 효율성을 보여주는 건 단순히 sleep을 하면서 로그가 찍히는 수준의 확인만 해본 게 다였다. 아직 큰 프로젝트를 구조적으로 접근한 적이 없어서 야매의 기운이 솔솔 날 것 같지만 최대한 자료조사를..
2021.12.05 -
[백준] 14466 소가 길을 건너간 이유6
문제 : 백준 14466번: 소가 길을 건너간 이유 6 첫 줄에 N, K, R이 주어진다. 다음 R줄에는 한 줄에 하나씩 길이 주어진다. 길은 상하좌우로 인접한 두 목초지를 잇고, r c r′ c′의 형태 (행, 열, 행, 열)로 주어진다. 각 수는 1 이상 N 이하이다. www.acmicpc.net 흔한 BFS문제이나 생각보다 시간 초과가 계속 발생해서 고전한 문제이다. 효율적인 문제 접근을 위해서 방문 여부 처리와 소들간의 만남 여부 처리가 중요하다. 점차 발전해나가면서 시도한 결과는 아래와 같다. - BFS를 소를 일대일 대응시키고 연결되면 BFS 탐색 종료한다. - 일대일 대응은 비효율적. 소들간에 경로가 겹치는 경우에는 중복적인 작업이 많이 이루어진다. 그래서 일대다 대응으로 소들간의 연결 가능..
2021.11.22 -
[백준] 1800번 인터넷 설치
백준: 1800: 인터넷 설치 1800번: 인터넷 설치 첫 번째 줄에 N(1 ≤ N ≤ 1,000), 케이블선의 개수 P(1 ≤ P ≤ 10,000), 공짜로 제공하는 케이블선의 개수 K(0 ≤ K < N)이 주어진다. 다음 P개의 줄에는 케이블이 연결하는 두 컴퓨터 번호와 그 가격이 차 www.acmicpc.net 상당히 오랫동안 블로그 업로드나 알고리즘 풀이를 오랫동안 쉬었다. 아무래도 직장에 들어가면서 자연스레 나태해진 탓일까... 사실 회사 내 보안이 철저해서 사진 하나 찍는 것도 조심스러워서 블로그 자체도 쉬게 되었다. 이러면 안되는데... 그래서 반성하고 최대한 하루에 하나씩 백준 문제풀이를 하고자 나만의 위클리 챌린지를 시작해보려고 한다..! 그런데 우선 첫 문제 골드부터 막혀서 너무 슬펐다..
2021.11.17 -
[프로그래머스] 피로도
프로그래머스: 링크 코딩테스트 연습 - 12주차 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던 programmers.co.kr 위클리 12주차 문제이다. 어려웠던 11주차 문제와 다르게 이거는 비교적 쉬웠다. 처음에는 Greedy로 풀기 위해 최소 필요 피로도 내림차순으로 정렬해야하나 고민했는데, 예시 문제를 보면 그 방식대로 풀면 문제가 해결되지 않았다. 문제 조건을 보면 던전 개수가 최대 8개이기 때문에 완전 탐색을 해도 큰 문제가 안된다고 판단했다. 그래서 DFS를 이용해 가능한 던전을 방문해보는 식으로 가능한 경우의 수를 모두 고려한다. #includ..
2021.10.31 -
[프로그래머스] 아이템 줍기
프로그래머스: 링크 코딩테스트 연습 - 11주차_아이템 줍기 [[1,1,7,4],[3,2,5,5],[4,3,6,9],[2,6,8,8]] 1 3 7 8 17 [[1,1,8,4],[2,2,4,9],[3,6,9,8],[6,3,7,7]] 9 7 6 1 11 [[2,2,5,5],[1,3,6,4],[3,1,4,6]] 1 4 6 3 10 programmers.co.kr 사실 최단 거리를 구하는 문제라서 BFS를 썼어야 이론상 조금 더 효율적인데, 그냥 DFS 재귀가 손에 익어서 DFS의 형식으로 문제를 풀었다. 그것보다 더욱 중대한 문제가 풀이 과정 중에 발생했다. 생각보다 문제는 빠르게 이해한 편이었으나, 문제의 함정을 파악하고 이를 해결하는 데 상당히 오래걸렸다. 상하좌우로 단순히 이동하면 되는 문제가 아니라, ..
2021.10.31 -
HTTPS vs. HTTP
평소 URL 주소창에 LOCK표시가 되어있으면 HTTPS, 아니면 HTTP이라고 인식만 할 뿐 이에 대한 자세한 내용은 알지 못하고 넘어갔다. 오늘은 이에 대한 본격적으로 분석해보고자 한다. HTTP란? HTTP는 하이퍼 텍스트 전송 프로토콜(Hypertext Transfer Protocol)의 약자이다. 서로 다른 시스템들(서버와 클라이언트) 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜이고, 80번 포트를 사용하고 있다. 따라서 HTTP 서버가 80번 포트가 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보낸다. HTTP는 애플리케이션 레벨(7계층인 응용계층)의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않은 Stateless 프로토콜이며 Method..
2021.10.25