문제 문제 바로가기> 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)에..
VSCode VSCode에서 Gitmoji extension을 설치해주면, 다음과 같이 쉽게 관련 이모지를 찾을 수 있다!! CLI CLI에서는 아래와 같이 입력해서 사용 가능하다 ! # gitmoji 설치 brew install gitmoji # mac npm i -g gitmoji-cli # window (node.js 먼저 설치) gitmoji -c # git commit -m [메세지] 대신 Gitmoji 한눈에 보기 emoji code description 🎨 :art: 코드의 구조/포맷 개선 ⚡️ :zap: 성능 개선 🔥 :fire: 코드/파일 제거 🐛 :bug: 버그 수정 🚑️ :ambulance: 긴급 수정 ✨ :sparkles: 새로운 기능 📝 :memo: 문서 추가/업데이트 💄 :lip..
문제 문제 바로가기> BOJ 2230번: 수 고르기 2230번: 수 고르기 N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어 www.acmicpc.net 풀이 정렬과 투 포인터를 이용하여 O(nlogn) 안에 문제를 해결할 수 있다. #include #include #define MAX 100001 using namespace std; int N, M; int num[MAX]; void input() { cin >> N >> M; for (int i = 0; i > num[i]; } void solution() { ..
branch 란? 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능 각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경 가능 다른 브랜치와 병합함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있음 새 브랜치 생성하기 $ git branch $ git branch # branch 목록 확인 $ git branch -m new # 현재 branch 이름 변경 $ git branch -m old new # branch 이름 변경 $ git branch --merged # 현재 Checkout 한 브랜치에 Merge 된 브랜치 $ git branch --no-merged # 현재 Checkout 한 브랜치에 Merge 하지 않은 브랜치 브랜치 전환하기 $ git c..
문제 문제 바로가기> BOJ 16928번: 뱀과 사다리 게임 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 풀이 사다리와 뱀 정보를 path 배열에 저장해주고, BFS를 통해 문제를 해결할 수 있다. BFS를 진행하는 이유는 "100번 칸에 도착하기 위해 주사위를 굴려야하는 횟수의 최솟값"을 구해야하기 때문이다. #include #include #define MAX 101 using namespace std; int N, M; int path[MAX]; bool ..
C++ 템플릿 라이브러리(STL)라고 하면 보통 다음 세 개의 라이브러리를 의미함 임의 타입의 객체를 보관할 수 있는 컨테이너 (container) 컨테이너에 보관된 원소에 접근할 수 있는 반복자 (iterator) 반복자들을 가지고 일련의 작업을 수행하는 알고리즘 (algorithm) 시퀀스 컨테이너 시퀀스 컨테이너 (sequence container) : 배열 처럼 객체들을 순차적으로 보관 연관 컨테이너 (associative container) : 키를 바탕으로 대응되는 값을 찾아줌 vector 가변 길이의 배열이라고 볼 수 있음 원소들이 메모리 상에서 실제로 순차적으로 저장되어 있음 따라서 임의의 위치에 있는 원소에 매우 빠르게 접근할 수 있음 #include #include using names..