백준 9

[BOJ-AutoSync] 2. selenium으로 BOJ 로그인하고 코드 불러오기

앞서 requests로 BOJ 로그인과 제출 기록 가져오는 코드가 잘 작동하는 것을 확인하고 신나있었으나...알고보니 requests 방식으로는 BOJ 사이트에서 로그인이 되지 않을 뿐만 아니라, 내가 잘 되고 있다고 착각한 것은 로그인이 되지 않은 상태에서도 조회가 가능한 부분이었었다😭 그래서 결국 selenium을 이용해 다시 구현해보기로 결정했습니다. selenium은 웹 브라우저를 자동화하는 도구입니다. 웹 크롤링을 하다보면 웹 페이지의 버튼을 누르는 등 페이지와 상호작용을 해야할 때가 있는데, selenium은 이를 동적으로 관리해주며 GUI를 통해 사용자가 직접 웹 페이지에 접근할 수 있기에 매우 편리합니다. 일부 웹 사이트는 크롤링을 막아둬 requests 같은 라이브러리를 통해 보내지는 ..

백엔드 2025.03.14

[BOJ-AutoSync] 1. requests와 bs4로 BOJ 크롤링하기

requests로 백준 로그인 구현하기백준에 제출한 코드를 열람하기 위해서는 반드시 로그인이 되어 있어야 하고, 비공개로 설정된 코드는 제출한 계정으로만 열람이 가능합니다.저는 가장 많이 사용되는 requests 라이브러리를 활용하여 로그인을 구현해보기로 결정했습니다. 먼저, 간단하게 사용자 아이디, 비밀번호 정보를 통해 로그인 함수를 구현해보았습니다.import requestsBASE_URL = "https://www.acmicpc.net"def login(boj_id, boj_pwd): session = requests.Session() login_url = f"{BASE_URL}/signin" payload = {'login_user_id': boj_id, ..

백엔드 2025.03.14

[BOJ-AutoSync] 0. 프로젝트 기획

평소 알고리즘 학습을 위해 1일1백준을 즐겨하는 저는 제가 제출해서 통과된 코드를 기록이나 백업 용도로 깃허브에 업로드해서 보관하고는 했습니다. 하지만 이렇게 직접 일일이 업로드하는 것은 상당히 귀찮기 때문에 결국 저의 레포는 껌데기만 남았습니다. 그래서 저는 이런 아이디어를 떠올렸습니다. 클릭 한 번에 내 제출 이력을 토대로 깃허브에 알아서 커밋해주는 친구가 있으면 좋지 않을까?  저는 이를 직접 웹으로 개발해보기로 결정하고, 아이디어를 떠올린 바로 그 순간 그 자리에서 곧장 개발을 시작했습니다. 주요 기능현재 생각하고 있는 기능은 아래와 같습니다백준 계정 연동사용자가 백준 아이디와 비밀번호를 입력하여 로그인합니다.깃허브 로그인 및 저장소 선택사용자가 GitHub 계정으로 로그인하고, 연동할 레포지토리..

백엔드 2025.03.14

[Python3] 백준 1149 - RGB거리

1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 문제 설명 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집..

알고리즘 2022.03.03

[Python3] 백준 2877 - 4와 7

2877번: 4와 7 창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 설명 문제 창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 K(1 ≤ K ≤ 109)가 주어진다. 출력 첫째 줄에 창영이가 좋아하는 숫자 중 K번째 작은 수를 출력한다. 알고리즘 분류 수학 구현 풀이 방법 출력되는 숫자를 차례대로 살펴보면 첫번째 숫자는 4, 두번째는 7, 세번째는 44, 네번째는 47, 5번째는 74, 6번째는 77, … 이진수와 비슷한 느낌을 받을 수 있다. N 길이 출력 이진수 십진수 1 $$ N\le2^1 $..

알고리즘 2022.03.02

[Python / Java] 백준 10757 - 큰 수 A+B

10757번: 큰 수 A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 설명 정수 A, B(0 < A,B < 10^10000)를 입력 받아 A+B의 값을 출력한다 알고리즘 분류 수학 구현 사칙연산 임의 정밀도 / 큰 수 연산 풀이 방법 파이썬의 경우, 오버플로우가 발생하지 않으므로 정수의 크기가 10^10000가 되어도 연산이 가능하다. 다만, C, C++, Java 등의 언어의 경우 이러한 큰 수의 경우 연산이 불가하므로 적절히 나누어 계산해야 한다. 재귀함수를 사용하여 풀이하고자 가장 익숙한 파이썬으로 먼저 구현해보려 하였으나 이 과정으로는 반례가 발생하여 올바른 정답을 찾지 못했고, 자바에서 charAt() 메소드를 사용하여 풀이하..

알고리즘 2022.02.19

[Java] 백준 1181 - 단어 정렬

문제 설명 단어를 입력 받고 입력 받은 단어를 크기 순으로, 단어 순으로 출력한다. 입력 첫째 줄: 단어 개수 N 둘째 줄~: 단어 출력 단어를 크기 순(1순위), 단어 순(2순위)로, 같은 단어가 여러 개인 단어는 한 번만 출력 알고리즘 분류 문자열 정렬 풀이 방법 입력 받는 단어를 배열에 저장하고 배열을 sort한 뒤, 단어 길이를 1에서부터 최대 단어 길이까지 늘려가며 같은 단어 길이를 가지는 배열 요소를 출력한다. JAVA import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(n..

알고리즘 2022.02.19

[Java] 백준 2941 - 크로아티아 알파벳

2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 문제 설명 문자열을 입력받아 크로아티아 알파벳과 일반 알파벳의 개수를 출력한다. 입력 알파벳, ‘-’, ‘=’ 으로 구성된 문자열 출력 크로아티아 알파벳+일반 알파벳 개수 알고리즘 분류 구현 문자열 풀이 방법 문자열에서 크로아티아 알파벳에 해당하는 문자열의 개수와 문자열에서 크로아티아 알파벳을 제외한 다른 알파벳의 개수를 출력한다. JAVA 시간(ms) 입력 메소드 출력 메소드 풀이 방법 시간(ms) 입력 메소드 출력 메소드..

알고리즘 2022.02.11