분류 전체보기

문제 풀이/알고리즘

[Softeer] 나무 섭지

문제 링크 : https://softeer.ai/practice/7726 사용 언어 : JAVA 아무튼 유령에게 잡히지 않고 남우가 탈출할 수 있다면 Yes, 못한다면 No를 출력 내 생각 초기 생각 유령은 필요에 따라 이동하지 않아도 되므로, 그냥 남우는 냅두고 최대한 빨리 탈출구로 가서 버티면 된다고 생각했다. 그래서 남우가_탈출구에_도착하는_시간(bfs) >= 유령이_탈출구에_도착하는_시간이라면 남우는 반드시 탈출 할 수 없을 것이라고 생각했다. MIN = 남우~출구까지의 최단 거리 for 유령: 유령들 min = Math.abs(유령.x - 출구.x) + Math.abs(유령.y - 출구.y) min **유령보다 먼저 도달할 수 있는 곳** // 만약 중간에 이동할 수 있는 곳이 없다면 탈출 실패..

CS/네트워크

[Network] 쿠키(Cookie), 세션(Session)이란?

쿠키와 세션의 이해를 돕기위해 아래의 상황을 확인해 보자. 얌념이는 네트워크 책을 사기 위해 자주 이용하는 온라인 서점 사이트에 접속했다. 로그인 창을 열자 자동 로그인 메시지가 떴고 얌념이는 저장된 아이디와 비밀번호로 로그인을 하였다. 원하는 책을 장바구니에 골라 담고 결제를 하려는 순간, 저녁 시간이 되어 얌념이는 저녁을 먹으러 갔다.저녁을 먹고 다시 돌아와 결제를 시도하자 로그인이 풀려 다시 로그인 페이지로 돌아갔다. 얌념이는 결국 다시 로그인을 하고 장바구니에 담긴 책을 결제하였다. 이 상황에서 어떤 것에 쿠키가 활용되고 세션이 활용되었을까? 쿠키 쿠키는 클라이언트, 브라우저의 로컬에 key-value 형태로 저장되는 데이터이다. 특징 브라우저의 로컬에 key-value 형태로 저장됨 유효기간이 ..

CS/알고리즘

[알고리즘] LCS(Longest Common Substring), 최장 공통 부분 수열 구현

LCS(Longest Common Substring) 정의 최장 공통 부분 수열. 주어진 여러 개의 수열의 부분 수열이 되는 수열들 중에 가장 긴 것을 찾는 문제이다. 백준의 이 문제를 보면 어떤 것인지 이해할 수 있다. (LIS: Longest Increasing Subsequence와 비슷하지만 다른 문제다) LCS는 항상 유일하지 않기 때문에 보통 길이를 묻는 문제가 나온다. 알고리즘 여러 문자열의 LCS를 효율적으로 구하기 위해서 DP가 사용된다. 두 문자열 사이의 LCS 길이를 저장하는 2차원 배열 LCS를 만들고, 아래와 같은 방식으로 배열을 채운다. X, Y 문자열 앞에 0을 넣는 이유는, i=1 || j=1일 때 Xi-1, Yj-1 값을 참조해야 할 수도 있기 때문에 만들어두는 것이다. 아..

문제 풀이/알고리즘

[Softeer] [21년 재직자 대회 예선] 회의실 예약

문제 링크 : https://softeer.ai/practice/6266 사용 언어 : JAVA 내 생각 초기 생각 처음에는 HashMap를 만들어서 회의 시간마다 true로 체크하고, 출력할 때 다시 계산하는 방식을 사용하려 했다. 그런데 회의실이 빈 start시간, end시간을 일일이 구하는게 너무 귀찮아서 다른 방식을 생각했다. 개선 회의가 (9-10), (12-13), (16-17) 이렇게 있다면, 회의실이 비어있는 시간대는 (10-12), (13-16), (17-18) 이렇게 된다. 아래의 (1)처럼 주어진 회의 시작/종료 쌍을 (2)처럼 변경하여 새로운 쌍을 짓는 것이다. (1) (회의1 시작, 회의1 종료) / (회의2 시작, 회의2 종료) / ... / (회의N 시작, 회의N 종료) (2)..

Backend/Django

django 설치 및 프로젝트 생성

가상환경 생성 및 활성화 virtualenv 설치 프로젝트 폴더 하나 생성 후 $ pip install virtualenv 가상환경 만들기 // python 3.7 이상 $ python -m venv myenv // python 3.7 이하 $ virtualenv myenv 가상 환경 활성화 $ source myenv/Scripts/activate 하면 하단에 (myenv)가 에코되면서 가상 환경 활성화가 완료된다. VSCode 인터프리터 선택 (반드시 가상 환경이 활성화된 상태에서 진행) ctrl+shift+p → python interpreter → ‘myenv’: venv 후에 터미널 창 (git bash) 열면 자동으로 가상 환경이 활성화된다. django 설치 $ pip install djang..

문제 풀이/알고리즘

[백준] (14500) 테트로미노

문제 링크 : https://www.acmicpc.net/problem/14500 사용 언어 : JAVA 내 생각 초기 생각 모든 N X M 칸을 돌면서 5가지 테트로미노를 모두 대조, 최댓값을 갱신한다. 근데 테트로미노의 블록들을 회전시키는 함수를 짜는게 까다로워서,, 그냥 회전으로 만들 수 있는 모든 모양을 2차원 배열로 만들어서 돌렸다. 그래서 이 정보를 담을 ArrayList 를 생성하고 수기로 열심히 넣어줌 코드는 아래와 같다. 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTok..

문제 풀이/알고리즘

[프로그래머스] (49191) 순위

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/49191 사용 언어 : JAVA 내 생각 초기 생각 처음에는 Topology Sort를 활용한 문제인 줄 알았는데 아무리 생각해도 정렬을 하고서 어떻게 순위를 계산할 방법이 떠오르지 않았다... 결국 구글 신의 도움을 받고, "플로이드 와샬"을 활용해야 한다는 것을 알게되었다. 적용 어떻게 플로이드 와샬을 사용할 수 있을까? 일단 2차원의 인접 배열을 만든다. 그리고 가중치를 세가지를 사용할 것인데, 각각 1, 0, -1이다. (사실 값은 중요하지 않고 세가지 상태를 나타낼 수 있으면 된다) array[A][B] == ? 1: A가 B를 이긴다 0: 알 수 없다. -1: A가 B에게 진..

문제 풀이/알고리즘

[프로그래머스] (86053) 금과 은 운반하기

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/86053 사용 언어 : JAVA 풀이 변수, 조건 정리 a : 신도시에 필요한 금 총량 b : 신도시에 필요한 은 총량 g[i] : i번째 도시가 가지고 있는 금 총량 s[i] : i번째 도시가 가지고 있는 은 총량 w[i] : i번째 도시가 트럭에 적재할 수 있는 최대 적재량 t[i] : i번째 도시에서 신도시까지 편도로 이동 시 걸리는 시간 각 도시에서 출발하는 모든 트럭은 동시에 운행할 수 있으며, 마지막까지 움직이는 트럭의 이동 시간까지만 구하면 된다. 아이디어 목표 금 a kg과 은 b kg을 전달할 수 있는 가장 빠른 시간을 구한다. 이럴 때 사용할 수 있는게 이분 탐색이다. 스무..

CS/운영체제

[운영체제] Page Fault, Thrashing

Page Fault 가상메모리에서 물리 메모리에 올려두지 않은 페이지에 대한 요청이 들어와 발생하는 예외 페이지 폴트가 발생하면 운영 체제는 그 데이터를 메모리로 가져와서 마치 페이지 폴트가 전혀 발생하지 않은 것처럼 프로그램이 계속적으로 작동하게 해준다. 원인 Major Page Fault 요청한 페이지가 물리 메모리로부터 page-out 되어 보조기억장치의 가상 메모리에 저장되어있다면 해당 페이지를 다시 물리 메모리로 page-in 해야 하는데 이것을 major page fault라고 한다. major page fault는 Disk I/O를 발생시킨다. Minor Page Fault 요청한 페이지가 물리 메모리에는 로드되었지만 MMU에는 로드되어있지 않다고 표시된 경우 이를 Minor page fau..

CS/운영체제

[운영체제] 가상메모리(Virtual Memory), 페이지 교체(Page Replacement)

Virtual memory 프로세스 전체가 메모리에 올라와 있지 않아도 실행이 가능하도록 하는 기법 당장 실행에 필요한 부분만 주기억장치(RAM)에 저장하고, 나머지는 보조기억장치(HDD)에 두고 동작하도록 하는 방법. 프로세스의 일부 메모리만 올려서 전체 프로세스를 병렬적으로 돌리게 함. 물리적 메모리에 제약을 덜 받으며 더 많은 프로세스를 한꺼번에 돌릴 수 있다. 장점 프로그래밍 용이성 이용률, 처리율 상성 단점 메모리 디스크 간 이동량 증가 → 속도 떨어짐, 교체 공간 확보 필요 페이지 부재 시 처리 방법 필요 왜 필요한가 프로그램이 실행되려면 우선 주기억장치에 들어가야 하는데, 다음과 같이 크기 5의 프로그램이 실행을 위해 크기 10의 주기억장치로 들어갈 때는 아무런 문제가 발생하지 않는다. 하지..

얌얌념념
'분류 전체보기' 카테고리의 글 목록