- 스터디는 온라인으로 1시간 진행한다. 단, 카메라를 켜고 진행한다.
- 10분 아이스 브레이킹 및 각 스터디원별 담당 문제에 대한 풀이법 공유
- 각 스터디원은 풀이법 공유시 이번 주에 정리 및 알게된 알고리즘이 있다면 추가적인 설명
- 매주 달라지는 PR 파트너의 코드에 대해 코드 리뷰
week17/BOJ_20300/섬의 개수_홍지훈.py
기존 1~2기와 폴더 구조 및 파일명 규칙이 동일합니다. 단, 매번 폴더 및 파일을 생성하는 과정이 귀찮았던 부분을 자동화하는 파일을 생성했습니다.
해당 자동화 파일은 scripts/create.sh 파일을 말하며 하단에 사용법을 정리해두었습니다.
alias 를 설정해두어서 아래와 같은 명령어를 입력시, 이번주차에 본인에게 해당하는 모든 폴더 및 파일을 생성해줍니다.
create {본인이름} {확장자} // 만약 파이썬을 사용한다면 확장자를 붙이지 않아도 상관없고 그 외의 언어를 사용시 js / cpp 등을 붙여주세요.
ex) create 홍지훈
create 홍지훈 cpp
create 홍지훈 js
만약 alias 가 먹히지 않았다면 프로젝트 루트 디렉토리에서 ./scripts/create.sh {본인이름} {확장자} 를 해주시면 됩니다. 혹은 루트 디렉토리에서 source bash.bashrc 를 터미널에 입력하신 뒤엔 alias 가 동작합니다.
ex) ./scripts/create.sh 홍지훈
위의 명령어 실행시 결과 👉
확장자명 입력하지 않을 경우
확장자명 입력할 경우
단, alias 는 루트 디렉토리에서만 동작합니다.
기존 브랜치명
BOJ_2546_홍지훈
신규 브랜치명
문제이름_홍지훈
브랜치명을 조금이라도 짧게 줄이고자 문제이름_본인이름 형식으로 바꿀 것을 건의합니다.
PR 메세지가 좀 길고 반복적으로 나오는 부분이 있어 짧게 줄이는 것을 건의합니다.
기존방식
[BOJ] 17836_공주님을 구해라! / 골드5 / 115분 / X
신규방식
공주님을 구해라! / 골드5 / 115분 / X
플랫폼, 문제번호 등은 폴더명 및 파일명에 드러나는 부분이니 이를 생략하고 문제이름
/ 문제난이도
/ 걸린시간
/ 소요시간
만 커밋메세지에 반영해보는 것을 건의합니다.
+) 추가로 풀지 못했던 기존의 코드도 지우지 말고 같이 PR 로 올려주시면 좋을 것 같습니다.
기존 템플릿
### 📖 풀이한 문제
- 백준 {문제번호}-{문제이름}
### ⭐️ 문제에서 주로 사용한 알고리즘
### 대략적인 코드 설명
신규 템플릿
### ⭐️ 문제에서 주로 사용한 알고리즘
### 대략적인 코드 설명
### 코드리뷰시 요청사항
문제 번호 및 문제이름은 PR TITLE 에 나타나 있으니 생략합니다. 코드리뷰 대상자가 랜덤으로 생성되니 해당 리뷰어에게 리뷰를 요청했으면 좋을 것 같은 사항을 PR 에 기입합니다. 이때 코드도 같이 적으면 코드리뷰시 더 용이할 것 같습니다.
- 폴더 구조 동일. 단, 자동화 script 추가로 create {본인이름} {확장자} 형식의 명령어를 통해 이번주차에 생성해야 하는 모든 폴더 및 파일 생성가능
- 커밋 메세지 간소화. -> 커밋 메세지엔
문제난이도
/걸린시간
/소요시간
만 입력 - PR 템플릿 변경
기존 규칙들
- 이 저장소를
clone
한다. - 생성된 저장소에 해당 주차에 맞게
BOJ_문제번호
로 폴더를 생성한다. - 생성된 폴더에 자신의 소스코드를 업로드한다. ex)
문제이름_자신이름.py / java ...
- commit 규칙을 지켜서 커밋한다.
- 원본 저장소로
Pull Request
를 한다. - 다른 사람들의 PR 을 보고 자유롭게 코드리뷰를 한다. 되도록이면 다른 멤버들의 코드를 보고 하나 이상씩 피드백을 남겼으면 좋겠습니다만 의견 부탁드립니다 :)
week@/플랫폼_문제번호/문제이름_자신이름.ts/ java ...
- 예시 :
week1/BOJ_2548/대표자연수_홍지훈.py
플랫폼 | 태그 |
---|---|
백준 | BOJ |
프로그래머스 | PSG |
- commit 메세지 : [플랫폼] 문제번호_문제이름 / 난이도 / 걸린시간 / 문제풀이성공여부
- merge 가 아니더라도 push 후 PR을 해주셔야 다른 분들이 코드리뷰를 할 수 있습니다!
git commit -m "[BOJ] 2548_대표자연수 / 실버3 / 10분 / O "
git commit -m "[PSG] 양궁 대회 / Lv. 2 / 110분 / X "
- 코드를 커밋하는 경우가 아닐때 ( readme 수정, 이름 변경, 코드 수정, 주석 추가 및 오타 수정 등 )는 자유롭게 커밋해주세요.
위와 같은 PR 템플릿을 등록해두었습니다. 각 문제별로 풀이를 하셨다면 PR 을 요청해주세요. 만약 해당 문제가 자신이 풀이법을 공유해야 하는 문제라면 PR 을 좀 더 자세히 작성해주세요. 이 PR 을 보며 풀이법을 공유해주시면 됩니다. 나머지 문제의 PR 의 경우엔 비교적 간단하게 작성하셔도 상관없습니다. PR 같은 경우 본인이 직접 merge 해주시면 되는데 가급적이면 파트너가 코드 리뷰한 뒤에 merge 해주시면 좋아요. 단, 몇일이 걸릴지 모르니 스터디 전엔 모두 merge 해주시고 PR 보내고 하루이틀이 지나도 파트너가 코드리뷰를 달지 않으면 일단 merge 해주세요. 파트너는 자신의 파트너의 PR closed 기록에 코드리뷰를 달아주시면 됩니다.
merge 전에 한번 Fetch 를 클릭해보세요~! 만약 PR 을 요청한 내 커밋이 가장 최신 main 브랜치로부터 나온 것이 아니라면 rebase 가 필요합니다. fork 툴을 사용한 rebase 방법은 하단에 방법을 설명해두었습니다. merge 된 원격 브랜치는 삭제해주세요~ 인원이 많다보니 원격 브랜치가 많아지면 복잡해집니다..


PR 후 다음 문제를 풀때 or 다른 스터디원이 커밋 혹은 merge 했을때 - `rebase 하기`
- git 명령어로 rebase 를 해주셔도 좋고 아니면 window / mac 모두 사용 가능한 GUI git 툴인
fork
를 사용하셔도 좋습니다. 설명은fork
를 기준으로 명시해두었습니다.
- Local Changes 는 아직 unstaged 된 변경사항, staged 된 변경사항을 확인할 수 있고 Commit subject 에 커밋할 이름, Description 에 커밋 상세내용, Amend 체크시 이전 커밋과 현재 변경점을 합쳐 새로운 커밋을 생성하지 않아도 기존 커밋에 새로 staged 에 올린 변경점을 반영할 수 있습니다.
이렇게 Staged 된 변경점이 있으면 해당 파일을 커밋할 수 있게 됩니다.
- All Commits 는 모든 커밋 기록을 볼 수 있습니다. 상단에 Fetch 를 클릭하면 새로고침이 되어서 스터디원들중 코드를 merge 했는지 내 커밋이 어떤 상황인지 한눈에 파악할 수 있어요.
마우스 우클릭 하시면 New Branch 를 클릭하여 브랜치를 생성할 수 있습니다.
저 주황색 박스가 로컬 브랜치이며 상단에 Push 를 해주시면 원격 저장소에 push 가 되어 왼쪽에 깃허브 아이콘이 나타납니다.
초록생 박스가 원격 저장소를 나타냅니다.
로컬브랜치가 있거나 아니면 원격 저장소만 있는 곳에 좌클릭으로 더블클릭해주면 주황색 박스 영역에 체크 표시가 뜨게 됩니다. 그러면 해당 브랜치에 체크아웃이 되어있다는 의미입니다.
현재 어떤 문제를 풀었고 push 하여 PR 을 요청한 상태입니다. 다음 문제를 풀려면 어떻게 해야할까요? 커밋을 하게된 시점에 새로 branch 를 생성하여 다음 문제를 풀기 시작해주세요.
브랜치는 해당 경로를 통해 삭제해줄 수 있습니다.
이번엔 내가 몇일 전에 PR 을 요청했는데 다른 스터디원들이 커밋을 했거나 merge 가 된 상황입니다. 이때는 바로 merge 를 하는 것이 아니고 rebase
를 해주세요. rebase
는 내 base 를 가장 최근 main
브랜치 위로 이동시켜줄 수 있도록 합니다.
먼저 rebase 하고싶은 내 커밋의 로컬 브랜치에 더블클릭하여 체크아웃해줍니다.
그리고 rebase 를 하고 싶은 목적지에 우클릭을 하면 interactively rebase ... 라는 것을 클릭합니다.
rebase 는 로컬 브랜치만 이동시킵니다. 따라서 초록색 영역의 원격 브랜치도 내 로컬 브랜치에 따라오도록 하려면 상단의 push 를 해줘야 합니다.
아마 변경점이 있는데 저 Force push 체크를 하지 않으면 오류가 뜰 수도 있어요.
그러면 아래와 같이 커밋을 깔끔하게 rebase 해줄 수 있습니다. 이 상태에서 merge 를 해주시면 됩니다.
squash 는 다음과 같은 상황에 사용합니다.

불필요하게 커밋이 두번 나온 상황입니다. 이걸 하나로 합쳐줄때 squash 를 사용합니다.
합치고 싶은 커밋에 우클릭을 하면 아래와 같이 squash 를 할 수 있습니다.


- 매주 사다리타기로 각 멤버별 파트너를 선정합니다. 그 주엔 해당 파트너의 PR 만큼은 꼭 코드리뷰할 수 있도록 노력해주세요~!!
- PR 에서 코드 리뷰를 한다.
- 전체 코드 흐름 파악한 뒤, 이 분이 어떻게 풀었을까 이해한 후 의견 제시
- 잘했다고 생각하는 부분
- 이렇게 하면 더 좋을 것 같다고 생각하는 부분
- 왜 이렇게 풀었는지 궁금한 부분
- 또 다른 풀이 방법 제시
- 코드 일부분에 코드 리뷰를 해도 되고 전체 코드 및 or PR 밑에 코멘트 작성으로 리뷰를 해도 됩니다.
파트너체계

- 문제별로 브랜치를 만들어 각 문제별 PR 을 요청해주세요.
- ex) 플랫폼_문제이름(문제번호)_본인이름 -> BOJ_10164_홍지훈 / PSG_양궁대회_홍지훈
- 백준은 중간에 문제번호를, PSG 는 문제번호가 없으니 문제이름을 붙여주세요.
2023.10.09 ~ 2023.12.03
조재은 | 배정은 | 홍지훈 | 은홍 | 이동혁 | 양승혜 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|
17주차 (2.13~2.18) | 로프 | 주유소 | 뒤집기 2 | 강의실 배정 | 우체국 | 택배 | 생략 |
18주차 (2.19~2.25) | 2xn 타일링 2 | 1,2,3 더하기 5 | 카드 구매하기 | 합분해 | 가장 긴 바이토닉 부분 수열 | 파일 합치기 | 플레이리스트 |
19주차 (2.26~3.3) | 두 스티커 | 테트리스 | 캠프 준비 | 배열 돌리기 4 | NxM 보드 완주하기 | 괄호 추가하기 | 괄호 변환 |
20주차 (3.4~3.10) | 늑대와 양 | 아기 상어 2 | 스타트링크 | 물통 | 연구소2 | 연구소3 | 문자열 압축 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|
9주차 (12.11~12.17) | 특정 거리의 도시 찾기 | 경로 찾기 | 친구 | 지름길 | Small World Network | k진수에서 소수 개수 구하기 | 숨바꼭질 |
10주차 (12.18~12.24) | DNA | 숫자 야구 | 도영이가 만든 맛있는 음식 | 오목 | 링크와 스타트 | 테트로미노 | 행렬 테두리 회전하기 |
11주차 (12.25~12.31) | 등수 구하기 | 한 줄로 서기 | 비슷한 단어 | 단어 맞추기 | 배열 돌리기 3 | 치즈 | 순위 검색 |
12주차 (1.1~1.7) | 돌 게임 | 1로 만들기 | 가장 큰 증가하는 부분 수열 | 점프 | LCS | 함께 블록 쌓기 | 메뉴 리뉴얼 |
13주차 (1.8~1.14) | 트럭 | 요세푸스 문제 | 킹 | 마법사 상어와 비바라기 | 마법사 상어와 파이어볼 | 마법사 상어와 블리자드 | 도넛과 막대 그래프 |
14주차 (1.15~1.21) | 동방 프로젝트 (Small) | 거북이 | 지구 온난화 | 후보 추천하기 | 인구 이동 | 상어 중학교 | 수식 최대화 |
15주차 (1.22~1.28) | 유기농 배추 | 쉬운 최단거리 | 봄버맨 | 단지번호붙이기 | 연구소 | 벽 부수고 이동하기 | 원 이동하기 1 |
16주차 (1.29~2.4) | 섬의 개수 | 섬의 개수 | 현수막 | 공주님을 구해라! | 일루미네이션 | 로봇 | 모래성 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|
1주차 (10.9~10.15) | 대표 자연수 | ATM | 블랙 프라이데이 | 단어 나누기 | 회의실 배정 | 두 용액 | 수리공 항승 |
2주차 (10.16~10.22) | 스택 | 괄호 | 프린터 큐 | 풍선 터뜨리기 | 쇠막대기 | 괄호 제거 | 괄호의 값 |
3주차 (10.23~10.29) | 기적의 매매법 | 지뢰 찾기 | 달팽이 | 달력 | 기차가 어둠을 헤치고 은하수를 | 배열 돌리기 1 | ZOAC |
4주차 (10.30~11.5) | 빙고 | ZOAC 3 | 상어 초등학교 | 오리 | 오목 | 원상 복구 | 빗물 |
5주차 (11.6~11.12) | 바이러스 | DFS와 BFS | 트리의 부모 찾기 | 효율적인 해킹 | 미로 탐색 | 토마토 | 택배 배달과 수거하기 |
6주차 (11.13~11.19) | 스위치 켜고 끄기 | 별 찍기 - 19 | 배열 돌리기 | 단어 뒤집기 2 | 홀수 홀릭 호석 | 사탕 게임 | 택배 배달과 수거하기 |
7주차 (11.20~11.26) | 다리 놓기 | 설탕 배달 | Four Squares | 가장 긴 증가하는 부분 수열 | 스티커 | 퇴사 2 | 두 큐 합 같게 만들기 |
8주차 (11.27~12.3) | 파스칼 삼각형 | 격자상의 경로 | 과일 서리 | 단어 맞추기 | 암호 | 주차 요금 계산 | 양궁 대회 |
블로그 / 노션 | 알고리즘 | 작성자 | |
---|---|---|---|
1 | js sort 특징 | 정렬 |
홍지훈 |
2 | 브루트 포스 (Brute Force, 완전 탐색) | 브루트 포스 (완전 탐색) |
배정은 |
3 | python 문법 for algorithm | python 문법 |
홍지훈 |
4 | 그리디 알고리즘 및 자료형별 시간복잡도 | greedt algorithm , time complexity |
홍지훈 |
5 | fork 툴을 활용한 rebase 방법 | fork , rebase |
홍지훈 |
6 | matrix 3가지 풀이 - transpose, reverse, rotate | matrix , transpose , reverse , rotate |
홍지훈 |
7 | Floyd's algorithm | likedlist , cycle |
홍지훈 |
8 | Linked List | likedlist |
홍지훈 |
9 | 비트마스킹 알고리즘 | 비트마스킹 |
홍지훈 |
10 | 배열돌리기 | matrix , 구현 , rotate |
홍지훈 |
11 | 입력타입 정리 | input |
홍지훈 |
12 | 트리 | tree , traversal |
홍지훈 |
13 | bfs & dfs | bfs , dfs |
홍지훈 |
14 | 최단경로 | 다익스트라 , 플로이드 워셜 |
홍지훈 |
15 | 우선순위 큐 | 우선순위큐 |
홍지훈 |
16 | 비트마스킹 알고리즘2 | 비트마스킹 |
홍지훈 |