문제 문제 바로가기> BOJ 10157번: 자리배정 10157번: 자리배정 첫 줄에는 공연장의 격자 크기를 나타내는 정수 C와 R이 하나의 공백을 사이에 두고 차례대로 주어진다. 두 값의 범위는 5 ≤ C, R ≤ 1,000이다. 그 다음 줄에는 어떤 관객의 대기번호 K가 주어진다. www.acmicpc.net 풀이 달팽이 모양을 그릴 수록 R, C 칸이 한칸씩 감소하는 성질을 이용하여 문제를 해결했다! #include #include #define pii pair using namespace std; int C, R, K; int dr[] = {1, 0, -1, 0}; // 상 우 하 좌 int dc[] = {0, 1, 0, -1}; void input(){ cin >> C >> ..
json-c JSON 객체를 C로 쉽게 구성하고 JSON 포맷된 문자열로 출력하여 JSON 포맷된 문자열을 다시 JSON 객체의 C 표현으로 파싱할 수 있는 reference counting object model을 구현하는 라이브러리 Install (e.g. Ubuntu 16.04.2 LTS) $ sudo apt install libjson-c-dev libjson-c3 $ vi src/main.cpp $ g++ src/main.cpp -ljson-c $ ./a.out // main.cpp #include #include using namespace std; int main(int argc, char **argv) { json_object *myobj, *dataobj; // 메모리 할당 myobj =..
문제 문제 바로가기> BOJ 8983번: 사냥꾼 8983번: 사냥꾼 입력의 첫 줄에는 사대의 수 M (1 ≤ M ≤ 100,000), 동물의 수 N (1 ≤ N ≤ 100,000), 사정거리 L (1 ≤ L ≤ 1,000,000,000)이 빈칸을 사이에 두고 주어진다. 두 번째 줄에는 사대의 위치를 나타내는 M개의 x-좌 www.acmicpc.net 풀이 중요한 포인트는 "사대를 기준으로 동물을 보는 것"이 아니라, "동물을 기준으로 사대를 보는 것"이다. 사대를 정렬해두고, 해당 동물을 잡을 수 있는 사대가 있는지 이분탐색을 이용하여 확인하면, MlogM(사대 정렬) + NlogN(나를 잡을 수 있는 사대 찾기) → O(MlogM) 만에 문제를 해결할 수 있다. #include #include #def..
문제 문제 바로가기> 정올 1141번: 불쾌한 날 JUNGOL history 최근 본 문제 jungol.co.kr 풀이 N이 최대 80,000이므로 각 소에 대해서 이중 for문을 돌면서 확인할 경우 시간초과가 발생한다. 내가 볼 수 있는 소의 수를 세는 것이 아니라, 나를 볼 수 있는 소의 수를 센다면, O(N)으로 문제를 해결할 수 있다. 다음과 같이 스택 안에 나(H[i])를 볼 수 있는 소들만 들어 있도록 유지하면 된다. (1번 소가 3번 소를 볼 수 있고, 3번 소가 4번 소를 볼 수있으면, 1번 소는 4번 소를 볼 수있다.) #include #include #define MAX 80001 using namespace std; int N; int H[MAX]; void input(){ cin >..
문제 개구리가 연못 위에서 놀고 있다. 개구리는 N개의 연 잎 들을 이용해서 이리저리 뛰어 놀고 있다. 개구리가 뛰는 장면을 보던 철수는 개구리가 도약을 하는 경우가 얼마나 있는지 궁금해졌다. 여기서 도약은 아래 조건을 만족하는 경우를 말한다. 1. 개구리가 뛴 거리가 이전에 뛴 거리 이상 뛰지만 그 2배보다 멀리 뛰지는 않는다. 2. 개구리는 오른쪽으로만 뛴다. 3. 개구리는 두 번만 뛴다. 4. 위 세 가지 조건을 만족한다면 어느 곳에서든 시작할 수 있다. 허나, 연 잎 들이 너무 많기 때문에 가능한 횟수가 매우 많아질 것 같다고 생각한 철수는, 개구리가 오른쪽으로 도약하는 경우가 얼마나 되는지 구해달라고 했다. 철수를 위해 프로그램을 짜주자. 첫 번째 줄에는 연 잎의 수 N(3 ≤ N ≤ 1,000..
문제 문제 바로가기> BOJ 1079번: 쇠막대기 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 풀이 닫는 괄호 ')' 일 경우 두 가지 경우가 있다. 1. 쇠막대기의 끝인 경우: 자신(조각)을 정답에 더해준다 (+1) 2. 레이저의 끝인 경우 = 이전 문자가 '(': 이때까지 쌓인 쇠막대기 개수만큼 정답에 더해준다 (+siz) #include using namespace std; string str; void input(){ cin >> str; } void solution(){ int ans=0, siz=0; for..
Shell운영체제 상에서 사용자가 입력하는 명령을 읽고 해석하여 대신 실행해주는 프로그램운영체제의 커널과 사용자를 이어주는 역할사용자의 명령어를 해석하고 운영체제가 알아들을 수 있도록 도와주는 명령어 해석기 Shell ScriptShell에서 사용할 수 있는 명령어들의 조합을 모아서 만든 배치 파일운영체제의 Shell을 이용하여 한줄씩 순차적으로 읽으면서 명령어들을 실행시켜주는 인터프리터 방식의 프로그램Shell Script를 활용하여 묶어진 명령어 조합을 수행하거나 반복적인 명령어를 단일 명령으로 쉽게 사용할 수 있음 기본 문법파일로 작성 후, 파일을 실행파일의 가장 위 첫 라인은 #!/bin/bash로 시작파일 형식(확장자): '파일이름.sh'쉘 스크립트 파일은 코드를 작성한 후에는 실행 권한 부여 ..
문제 문제 바로가기> 정올 1985번: 분수 정렬 JUNGOL history 최근 본 문제 jungol.co.kr 풀이 1 * 1/2과 2/4처럼 값이 겹치는 경우 분모가 작은 1/2을 선택 (분모가 작으면 분자도 작다) 조합 가능한 모든 분수를 생성해주고, 분수값(오름차순) 과 분모값(오름차순)을 기준으로 정렬해준다. 만약 분수값이 이전 분수값과 같다면 continue 해주면 된다. 분모의 범위를 2부터, 분자의 범위를 1부터 한 것은 0과 1이 되는 값은 어차피 0/1과 1/1이 출력될 것이기 때문이다. 100000 을 곱해준 후 나눈 값을 저장한 것은 소수가 아닌 정수 형태로 저장하기 위함이다. 1.0을 곱해주고 double로 저장해서 계산해도 된다. #include #include #include..
문제 문제 바로가기> BOJ 9047번: 6174 9047번: 6174 입력은 표준입력(standard input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스마다 한 줄에 네 자리 수(1000~9999)가 하나씩 주어진다. 단, www.acmicpc.net 풀이 1 타입을 문자열과 정수로 변환해가며 풀었다! 이때 정수 -> 문자열로 변환하는 과정에서 0089 같은 것이 나올 수 있으므로 자리 수를 맞춰주는 연산을 추가로 진행해주었다. 이런 과정을 거치지 않으려면, 풀이2와 같은 방법으로 풀 수도 있다. #include #include #include #include #define SIZE 4 using namespace std; in..
cherry-pick 다른 브랜치에 있는 커밋을 선택적으로 내 브랜치에 적용시킬 때 사용하는 명령어 # git cherry-pick {commit hash} $ git cherry-pick 555f8b4 # 한번에 여러개의 커밋을 반영하고 싶은 경우 $ git cherry-pick 555f8b4 8f618a0 480b6bb $ git cherry-pick 555f8b4..480b6bb # 가져오고 싶은 커밋 범위 지정 아래는 cherry-pick을 이용하여 현재 branch y에 branch x의 3개의 커밋을 반영한 모습이다. 코드에 대한 수정사항, 커밋 로그, 작성자 역시 그대로 가져온다. cherry-pick 충돌 해결 다른 브랜치의 커밋 사항을 가져오므로 수정 사항이 현재 브랜치의 코드에 맞지 않..
커밋 템플릿을 한번 설정해두면, 같은 형식으로 커밋할 때 유용하게 사용할 수 있다 !! 커밋 템플릿 파일 생성 $ vi .git_template # 원하는 template 저장 template 예시 # : ##### Subject 50 characters ################# -> # Body Message ######## Body 72 characters ####################################### -> # Issue Tracker Number or URL (optional) -> # --- COMMIT END --- # Type can be # feat : 새로운 기능 추가 # fix : 버그/오타(typo)/로직 등 코드를 수정한 경우 # refactor: 코드..
start.spring.io에서 프로젝트 생성 build tool (의존 관계 관리), 최근에는 Gradle을 사용하는 추세 SNAPTHOT : 아직 만들고 있는 버전 M~ : 아직 정식 릴리즈 되지 않은 버전 정식 릴리즈 된 버전에서 가장 최신 버전 선택 *SpringBoot 3.0부터는 JAVA 17이상만을 지원 !! Artifact : 산출물 이름 GENERATE (다운로드) Gradle은 의존 관계가 있는 라이브러리들을 함께 다운로드 함 ✅ spring-boot-starter : 스프링부트 + 스프링코어 + 로깅(logback, slf4j) ✅ spring-boot-starter-web : spring-boot-starter-tomcat(톰캣/웹서버), spring-webmvc(스프링 웹 mvc)..
HTTP 통신은 stateless -> 상태를 기억하기 위해 쿠키, 세션, 토큰을 사용 Cookie 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각으로, key=value 형식의 문자열 데이터 묶음 브라우저에 저장됨 (클라이언트가 조작할 수 있고, 서버는 쿠키에 담긴 정보를 바탕으로 클라이언트 식별, 광고 추천 등 세션 관리, 개인화, 트래킹에 사용 Cookie 인증 방식 브라우저(클라이언트)가 서버에 요청(접속)을 보냄 서버는 클라이언트의 요청에 대한 응답을 작성할 때, 저장하고 싶은 정보를 응답 헤더의 Set-Cookie에 담음 이후 클라이언트가 재요청 할 때마다 저장된 쿠키를 요청 헤더의 Cookie에 담아 요청을 보냄 Cookie 단점 보안에 취약. 요청 시 쿠키의 값을 그대로 보내기 때..
문제 문제 바로가기> BOJ 2304번: 창고 다각형 2304번: 창고 다각형 첫 줄에는 기둥의 개수를 나타내는 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 그 다음 N 개의 줄에는 각 줄에 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L과 높이를 나타내는 정수 H가 한 개의 www.acmicpc.net 풀이 L이 최대 1000이므로, brute-force 방식으로 문제를 쉽게 해결할 수 있다 ! #include #include #define MAX 1001 using namespace std; int N, L, H; int pillars[MAX]; int maxVal, maxIdx; void input(){ cin >> N; for (int i = 0; i > L..
문제 문제 바로가기> BOJ 17485번: 진우의 달 여행 (Large) 17485번: 진우의 달 여행 (Large) 첫줄에 지구와 달 사이 공간을 나타내는 행렬의 크기를 나타내는 N, M (2 ≤ N, M ≤ 1000)이 주어진다. 다음 N줄 동안 각 행렬의 원소 값이 주어진다. 각 행렬의 원소값은 100 이하의 자연수이다. www.acmicpc.net 풀이 "달 여행에 필요한 최소 연료의 값"을 구하기 위해 모든 경우의 수를 따져보는 경우 O(N^3)이므로, 보자마자 DP로 풀어야 할 거 같은 느낌이 들었다! 나는 우선 각 방향에 번호를 붙여주었다. (k : 0 ~ 2) 다음으로 dp 배열의 의미를 다음과 같이 정의해 주었다. dp[y][x][k] : dp[y][x][k] : 방법 k로 (y, x)에..