[백준] 15662 톱니바퀴 (2) - JAVA
·
Algorithm
백준 15662 톱니바퀴 (2) Gold V - JAVA 📌https://www.acmicpc.net/problem/15662문제 설명문제 풀이접근 💡사실 이 문제는 엄청난 아이디어를 떠올려야 한다기 보다는 문제에서 주어진 조건 그대로 구현하면 되는 시뮬레이션 문제이다. 이 문제에 접근하기 위해 가장 중요하게 생각해야 하는 부분은 톱니바퀴가 회전하면 양 옆 톱니바퀴는 반대로 회전하게 된다는 것이다.이 점을 활용하여 문제에 천천히 접근해보자. 우선 테스트케이스 1번을 살펴보자. 4개의 톱니바퀴가1010111101111101110011100000010 으로 되어있다. 톱니바퀴의 12시부터 차례로 0, 1, 2 ... 인덱스가 부여된다.우리가 살펴봐야 할 부분은 톱니바퀴가 맞물리는 2번 인덱스와 6번 인덱..
[백준] 2156 포도주 시식 -JAVA
·
Algorithm
백준 2156 포도주 시식 Silver I - JAVA 📌https://www.acmicpc.net/problem/2156문제 설명문제 풀이접근 💡문제에서 주어진 조건 중 와인 3잔을 연속해서 마실 수 없다는 조건을 잘 생각해보자.현재 위치에서 OOX, OXO, XOO의 경우를 생각해 볼 수 있는데, 이 경우 중에 어떤 경우가 제일 많이 먹을 수 있는 경우인지 판단해야 한다. 표로 그려 예시를 확인해보자. 현재 선택하고 있는 와인은 3번째 와인이라고 가정한다. dp 배열을 만들어보자.dp[1] = wine[1], dp[2] = wine[1] + wine[2]로 초기화 해준다.  1. OOX 의 경우와인순서 (i)123456선택여부OOX    이 경우에는 dp[i - 1]이 된다. 2. OXO의 경우와..
[백준] 2512 예산 - JAVA
·
Algorithm
백준 2512 예산 Silver II - JAVA 📌https://www.acmicpc.net/problem/2512문제 설명문제 풀이접근 💡이 문제의 핵심은 주어진 총액을 초과하지 않고 상한액을 설정하는 것이다.지방마다 요청하는 예산이 주어지고 모든 요청을 배정할 수 없으면 상한액을 정해서 초과분을 상한액에 맞춰 배정하야 한다.상한액을 계속 조정해가면서 총 배정액이 주어진 총액을 넘지 않도록 해야한다.이 조건 속에서 가능한 최대 상한액을 찾아야 한다. 최대 예산이 10억이므로 이분탐색으로 효율적으로 상한액을 찾아보자! 1. 탐색 범위를 설정해보자.    정렬을 한 후에 최소상한액을 0, 최대 상한액을 arr[N - 1]과 주어진 총액의 최댓값으로 설정한다.2. 상한액을 logN으로 탐색해보기 위해 ..
[운영체제] 시스템 호출 (System Call)
·
운영체제
사용자 프로그램이 운영체제의 기능을 요청하는 매커니즘이다.시스템 콜 (System Call) 이란사용자 모드에서 실행되는 프로그램이 커널 모드에서 사용되는 서비스를 사용하기 위해 인터럽트를 발생시키는 방식으로 작동한다.일종의 소프트웨어 인터럽트이다.커널이란?자원에 접근하게 하는 기능, 프로그램이 안전하고 올바르게 실행되게 하는 기능은 운영체제의 핵심 서비스이다. 이렇게 운영체제에서 핵심 서비스를 담당하는 부분을 커널이라고 한다. 운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다.만약 응용프로그램이 CPU, 메모리, 하드디스크에 마음대로 접근하고 조작하게 된다면 자원이 무질서하게 관리될 것이고 컴퓨터 전체에 큰 악영향을 끼칠 수 있게 된다.응용프로그램..
[자료구조] 스택과 큐
·
자료구조
스택 젠가를 떠올려보자. 젠가 케이스에 젠가를 정리해서 넣었다면 꺼내려고 할 때 위에서부터 하나씩 꺼내야 할 것이다. 이처럼 데이터를 넣는 곳과 빠지는 곳의 위치가 같은 자료구조를 스택이라고 한다. 이런 구조를 후입선출 구조 (LIFO; Last In First Out)라고 한다.스택이 비어있을 때 데이터를 꺼내려고 시도하면 스택 언더플로우(Stack Underflow)가 발생하고, 스택이 꽉 차있을 때 자료를 넣으려고 하면 스택 오버플로우(Stack Overflow)가 발생한다. 자바에서는 크게 5가지 메서드를 사용한다push(x), add(x) : x를 스택의 맨 위에 쌓는다.push() 메서드는 자바의 스택 클래스에서 제공하며 추가한 객체를 리턴한다. add() 는 List 클래스에서 제공하며 성공..
[알고리즘] Topological Sort - 위상 정렬
·
Algorithm
💡위상정렬이란?위상정렬은 방향이 존재하는 그래프에서 정점들의 진행 순서를 지키며 모든 정점을 순서대로 나열하는 알고리즘이다. 간단한 예시로, 대학교 수업 과정을 생각해 보자.자료구조 수업을 들으러면 먼저 프로그래밍 기초를 들어야 한다.알고리즘 수업을 들으려면 먼저 자료구조를 들어야 한다.운영체제 수업을 들으려면 먼저 자료구조를 들어야 한다. 이런 선수과목 관계를 위상정렬하게 되면 다음과 같은 순서가 나올 수 있다.👨🏻‍💻 프로그래밍 기초 -> 자료구조 -> 알고리즘 -> 운영체제 ❗️위상정렬의 주요 특징순환(싸이클)이 없는 유향 그래프에서만 가능하다.같은 그래프여도 여러 가지 위상 정렬이 나올 수 있다.주로 스케쥴링이나 작업 순서 결정, 선수 과목 계산 등에 활용한다.   위상정렬 구현해 보기 1..
쿠키(Cookie)와 세션(Session)
·
네트워크
HTTP 프로토콜의 특성쿠키와 세션을 이해하기 위해선 HTTP 프로토콜의 특성인 비연결성(Connectionless)과 무상태성(Stateless)에 대해서 먼저 알고 있어야 한다. 이전 글을 참조하여 한 번 훑어보고 오는 것이 쿠키와 세션을 이해하기 쉽다.2024.10.18 - [WEB] - [HTTP] HTTP의 특성 : 비연결성(Connectionless), 무상태성(Stateless) [HTTP] HTTP의 특성 : 비연결성(Connectionless), 무상태성(Stateless)HTTP는 웹에서 데이터를 주고받기 위한 프로토콜이다. HTTP의 두 가지  특성을 알아보자. 1. 비연결성(Connectionless) 비연결성은 HTTP가 기본적으로 요청과 응답이 끝나면 연결을 끊어버리는 특성이ej..
[HTTP] HTTP의 특성 : 비연결성(Connectionless), 무상태성(Stateless)
·
네트워크
HTTP는 웹에서 데이터를 주고받기 위한 프로토콜이다. HTTP의 두 가지  특성을 알아보자. 1. 비연결성(Connectionless) 비연결성은 HTTP가 기본적으로 요청과 응답이 끝나면 연결을 끊어버리는 특성이다. 즉, 한 번의 요청과 응답이 완료된 후 서버는 해당 클라이언트와 연결을 유지하지 않는다. 현실 세계에 빗대어 예시를 들자면,    1. 나는 피자를 먹고 싶어 피자 가게에 전화를 걸어 피자를 주문한다.    2. 점원이 전화 주문을 받고 주문 내역을 주방에 전달한다.    3. 주문이 끝나면 전화를 끊는다.    4. 추가 주문이 필요하면 다시 피자 가게에 전화를 걸어야 한다.  이처럼 비연결성은 피자 가게에서 점원이 주문을 받고 전화를 끊는 것과 같다.이로써 점원은 다른 손님의 전화를 ..
[HTTP] GET과 POST의 차이
·
네트워크
GET과 POST는 서버에 정보를 요청하는 HTTP 메서드이다. 목적에 따라 사용되는 메서드는 다르다. 두 메서드의 차이를 알아보자.GET 요청GET/serach?q=hello&hl=ko HTTP/1.1Host: www.google.com1. 리소스 조회에 사용한다.2. 서버에 전달할 데이터는 쿼리를 통해서 전달한다. 쿼리 파라미터에 내용이 노출되기 때문에 민감한 데이터를 다룰 때는 사용이 적절치 않다.3. 길이 제한이 있다. POST 요청POST/membersHTTP/1.1Content-Type: application/json{ "username": "hello", "age": 20} 1. GET과 다르게 전송할 데이터를 메시지 바디에 담아서 전달한다. 바디의 타입은 요청 헤더의 Content-Type..
[TIP💡] 인텔리제이(Intellij)로 코딩테스트 환경 구성하기 (입출력을 txt로?)
·
Algorithm
백준이나 SWEA에서 문제를 풀다보면테스트 케이스를 확인하기 위해 계속 복사+붙혀넣기를 하기 귀찮을 때가 있다. SWEA 같은 경우에는 입력 테스트케이스를 복붙하여 입력할 때 가끔 오류가 날 때도 있다.. 우리는 평소 아래와 같이 입출력을 사용한다! 디버깅을 하다보면 디버깅 할 때마다 이 테스트 케이스를 계속 복사 붙혀넣기 해야 하기 때문에상 당 히번거롭다... 하지만..! 디버깅때 매번 테스트케이스 입력 없이 한번 입력해두고 디버깅을 할 수 있는 방법이 있다!!!!!   1. 아래와 같이 코딩테스트를 연습할 프로젝트를 생성 하고 클래스명 왼쪽에 있는 초록색 실행버튼을 눌러준다 2. 텍스트 파일 input.txt와 output.txt 파일을 만들어 준다! 3. 우측 상단에 Main (클래스이름) -> E..