본문 바로가기

분류 전체보기

(83)
[운영체제] 프로세스와 스레드 1. 프로세스 (Process) 운영체제로 부터 자원을 할당받은 작업의 단위를 말합니다. (1) 프로그램과 프로세스 프로그램은 윈도우에서는 exe파일, 맥북에서는 dmg 파일을 의미합니다. 프로그램은 프로그래밍 언어(C, Java 등)로 코드를 작성하면 개발할 수 있습니다. 즉, 프로그램은 말그래도 코드 덩어리를 말합니다. 이런 코드 덩어리(프로그램)를 실행시키면 프로세스가 된다. 정리해 보면 프로세스는 프로그램이 작동되고 있는 상태를 말합니다. 프로그램이 실행되기 위해서는 운영체제(OS)가 메모리를 할당해줘야 합니다. 이렇게 운영체제에게 메모리 공간을 할당받고, CPU도 할당받아서 프로그램의 코드가 실행되면 프로세스가 됩니다. (2) 프로세스의 상태 상태 설명 생성 (new) 프로세스가 생성되고 아직 ..
[백준] 1918번 후위 표기식 (Java) 1918 후위 표기식 1. 문제 분석 연산자의 우선순위를 생각해야 하는 문제입니다. 주의해야 할 점은 A + B + C의 경우에는 앞에 있는 +가 우선순위가 더 높기 때문에 ABC++가 아닌 (A + B) + C로 묶어서 AB+C+가 나와야 합니다. 그리고 추가로 괄호로 묶여서 제공되는 연산자의 경우에는 가장 우선순위가 높기 때문에 가장 먼저 처리해줘야 합니다. 알파벳에 해당하는 (A ~ Z)는 바로 문자열에 추가하고, 연산자(+, -, *, /)는 Stack에 저장해야 합니다. 2. 핵심 아이디어 Stack에는 연산자 들이 저장됩니다. 즉 먼저 들어온 연산자들은 아래쪽에 쌓이게 됩니다. 첫 번째 아이디어는 "("가 스택에 들어왔을 때입니다. "("는 일단 스택에 넣어줍니다. 그다음 연산자를 받아주고, ..
Mustache 사용해서 html 파일 읽을 때 한글 깨짐 1. 코드 구성 @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry) { MustacheViewResolver resolver = new MustacheViewResolver(); resolver.setPrefix("classpath:/templates/"); resolver.setSuffix(".html"); registry.viewResolver(resolver); } } Mustache 템플릿 엔진을 사용해서 html 파일을 읽도록 설정을 해줬습니다. 로그인 페이지입니다. login.html ..
[백준] 2206번 벽 부수고 이동하기 (Java) 2206번 벽 부수고 이동하기 1. 문제 분석 0은 이동할 수 있는 칸, 1은 벽이 있어서 이동할 수 없는 칸입니다. (1, 1)에서 시작해서 (N, M)까지 가는데 최단 경로를 구해야 합니다. 이동은 상, 하, 좌, 우로 가능하고, 이때 벽(1)을 최소 한번 부수고 지나갈 수 있습니다. 문제에서 주어진 사항을 보고, BFS로 접근해야겠다는 생각을 했습니다. 방향이 존재하기 때문에 재귀적으로 구현을 했고, 벽을 1번 이상 부순 경우는 더 이상 나아가지 못하도록 막는 방법을 생각했습니다. 계속 틀렸다는 말이 나와서 2차원 배열 visited를 이용하여 문제를 변경해서 풀어봤는데, 이때는 시간 초과가 났습니다. 2. 핵심 아이디어 특정한 지점 (x, y)에 도달하는 데 있어서 벽을 1번 부수고 가는 경우와 ..
[백준] 1967번 트리의 지름 (Java) 1967번 트리의 지름 1. 문제 접근 특정 노드 2개를 선택해서 쭉 늘렸을 때, 가장 길이가 긴 두 노드를 찾아야 한다. 이 길이를 문제에서는 트리의 지름이라고 칭합니다. 1번 노드부터 탐색해서 가장 가중치가 큰 노드 하나를 선택합니다. 가장 가중치가 큰 노드는 반드시 트리의 지름의 한 점이 된다고 생각했습니다. 가장 가중치가 큰 노드를 하나 선택했으면, 해당 노드부터 BFS로 다시 탐색을 시작해서 가장 길이가 긴 값(트리의 지름)을 반환합니다. 2. 접근 과정에서 실수했던 부분 문제에서 "간선에 대한 정보는 부모 노드의 번호가 작은 것이 먼저 입력되고, 부모 노드의 번호가 같으면 자식 노드의 번호가 작은 것이 먼저 입력된다."라는 부분이 있었습니다. 이 부분을 잘못 이해해서 다음과 같이 문제 접근을 ..
[백준] 1238번 파티 (Java) 1238번 파티 문제 풀러 가기 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 1. 문제 분석 N명의 학생들은 X번 마을까지 갔다가 다시 돌아와야 한다. 이때 갔다가 다시 돌아오는 최단 거리를 구해야 한다. 각 마을에서 마을로 이동하는 데는 양의 가중치(거리)가 존재한다. 2. 생각해 보기 양의 가중치가 존재하기 때문에 다익스트라 아니면 플로이드 와샬을 고려해 본다. 플로이드 와샬 알고리즘은 O(N^3)의 시간 복잡도가 필요하다. 마을의 개수(N)가 최대 10^3이기 때문에 플..
[네트워크] PDU (Protocol Data Unit) 1. PDU (Protocol Data Unit)이란? 네트워크의 계층과 계층 사이에 데이터가 전달될 때 한 덩어리의 단위를 PDU라고 합니다. PDU는 헤더와 페이로드로 구성되어 있고, 계층마다 부르는 명칭이 다릅니다. (1) 헤더 (Header) 각 계층마다 필요한 정보 및 기능이 담겨있습니다. 제어 관련 정보들이 포함되어 있습니다. (송신) 상위 계층에서 전달된 PDU에 자신의 계층에서 만든 헤더를 추가해서 하위 계층으로 전달합니다. (수신) 각 층에서 생성한 헤더 정보는 각 층에서 해결합니다. (2) 페이로드 (Payload) 송신 측에서 보내고자 하는 실제 데이터를 의미합니다. 택배를 예로 들면 박스, 송장, 포장지 등은 페이로드에 속하지 않고, 받기로 한 택배물이 페이로드라고 생각하면 됩니다.
[네트워크] 네트워크 프로토콜 표준화 1. 네트워크 프로토콜이란? 다른 장치들끼리 데이터를 주고받기 위해 설정된 공통된 인터페이스를 말합니다. 쉽게 생각해 보면 장치와 장치 사이에 데이터 통신을 해야 하는데, 미리 정해놓은 어떤 규약(약속)에 따라서 통신을 하게 됩니다. 이때 이 규약(약속)을 네트워크 프로토콜이라고 합니다. 2. 프로토콜의 표준화가 필요한 이유? 모든 송신자와 모든 수신자가 표준화된 프로토콜을 지키기만 한다면 서로 통신이 가능하도록 해줍니다. 하지만 프로토콜이 표준화되어 있지 않다면, 특정 송신자는 자신의 프로토콜과 일치한 특정 수신자에게만 데이터를 송신할 수 있게 됩니다. 3. 프로토콜의 종류 많이 들어본 프로토콜 위주로 정리해보면 TCP, IP, UDP, HTTP 등이 있습니다. 여기서 마지막에 붙은 'P'가 Proto..