전체 글 176

[알고리즘] 2023 KAKAO BLIND RECRUITMENT 1차 코딩테스트

작년까지 연습삼아 친 카카오 코딩테스트를 올해는 취준생 입장으로 응시하게 되었다. 지금까지 재미로 풀어왔던 알고리즘 문제를 내 취업을 위해 푼다고 생각하니 기분이 오묘했다. 포지션은 백엔드와 인프라가 있길래 백엔드로 지원했다. 문제의 자세한 설명을 남기면 안될 것 같아 풀이만 간략하게 작성하려고 한다. 모든 문제를 python으로 풀었다. 티어와 태그는 솔브드 기준 주관적으로 작성하였다. 1번 [Solved!] 티어 : B1 태그 : 구현, 사칙연산 날짜에서 종류에 맞게 달을 더한 뒤 현재 날짜와 비교하면 되는 단순 구현 문제이다. python에 datetime이라는 편리한 라이브러리가 있다. 2번 [Solved!] 티어 : S4 태그 : 그리디, 투포인터 어차피 모든 집을 돌아야 한다면 가장 먼 집부터..

[기타] OPIc

보게 된 이유 지난주에 학교에서 삼성 SDS설명회를 듣고 한번 지원해보자 해서 보니까 오픽이나 토익 스피킹이 필요하다고 한다. 지원은 14일까지고.. 그 때까지 오픽점수를 얻어야하고.. 7일 남았고... 다행히도 오픽은 거의 2일마다 시험이 있어 지원이 가능하다. 금요일까지는 접수가 마감됐고 14일 전에 성적이 나오는 시험은 일, 월 중 하나인데 일요일로 선택했다. (삼성 접수 마감일에 맞춘것 같다.) 준비 과정 실질적으로 남은 시간때문에 3일의 전사를 했어야 했다. 책, 인강은 볼 시간이 없고 오로지 유튜브에 의존했다. 수능과 토익으로 다져진 읽기, 듣기는 어느정도 되겠으나 말하기여서 살짝 힘들었다. 다행히 오픽은 나오는 유형이 정해져 있었고 그 유형에 맞춰서 대답만 잘하면 되는 것이었다. 시험 유튜브..

기타/기타 2022.09.12

우분투 22.04 업그레이드 오류

노트북 PC를 우분투 20.04에서 우분투 22.04로 업그레이드 하다가 오류가 났다. oh no! something has gone wrong a problem has occurred and the system can't recover. 이런 메시지가 나오면서 화면과 마우스가 먹지 않는 증상이다. 해결법 1. ctrl + alt + f3를 이용해서 CLI모드로 들어가서 로그인을 한다. 2. 다음 명령어를 입력한다. sudo apt-get update sudo apt-get dist-upgrade sudo dpkg --configure -a sudo apt-get clean sudo apt-get autoremove sudo reboot special thanks https://askubuntu.com/..

[도커] 12. dockerignore

우리는 git을 사용할 때 불필요한 파일의 add를 방지하기 위해 .gitignore파일로 관리한다. 도커도 같은방식으로 .dockerignore파일을 이용하여 관리할 수 있다. 사용방법을 한번 알아보자. 문제상황 dockerignore가 없을 경우 어떤 문제가 있는지 알아보자. # 폴더구조 ├── Dockerfile ├── log └── main.py # Dockerfile FROM python WORKDIR /app COPY . . CMD ["python3", "main.py"] # main.py import time while 1: pass # Do something main.py 는 어떤 작업을 수행하는 파이썬 파일이다. (ex. 웹서버, 모델 학습 ...) log파일은 컨테이너를 만들 때 불필요..

[도커] 11. 환경변수

도커에 들어있는 앱을 사용할때 데이터베이스 사용자 이름같은 환경변수를 주입해야 할 때가 있다. Dockerfile을 만들 때 편리한 방법으로 환경변수를 넣을 수 있다. 폴더 구성 ├── Dockerfile ├── app.py └── templates └── main.html 폴더 구조는 위와 같다. 간단한 플라스크를 이용해서 테스트해보고자 한다. # app.py from flask import Flask, render_template import os app = Flask(__name__) user = os.environ.get("USER_NAME") port = os.environ.get("PORT") @app.route("/") def main(): return render_template("main..

[도커] 10. 도커 네트워크

컨테이너에서 외부 api를 불러온다든지 다른 컨테이너의 api를사용하는 등 컨테이너에서 통신이 필요할 때가 있다. 실제로 컨테이너를 하나만 사용할 경우는 별로 없고 프론트 컨테이너, 백엔드 컨테이너, 데이터베이스 컨테이너를 한번에 사용하는 것처럼 여러개의 컨테이너가 통신해야 하는 경우가 많다. 이러한 통신을 하는 방법에 대해서 알아보자. 유스케이스 일단 컨테이너에서 통신을 하는 경우가 크게 아래와 같을 것이다. 여기서 호스트 컴퓨터는 도커를 실행하고 있는 컴퓨터이다. 5번과 6번은 실질적으로 컨테이너간의 통신이기 때문에 하나의 경우라고 봐도 된다. 물론 1부터 6까지 모든 연결이 가능하다. 이제 어떻게 통신하는지 알아보자. 위 통신을 위해 간단한 파일 두개를 한 폴더에 만들었다. # app.py from..

[스프링] 9. 쿼리메소드

지난 시간에 JPA를 이용하여 findById, findAll등의 메소드를 사용하여 데이터베이스에 접근할 수 있다는 것을 알았다. 그때는 간단하게만 살펴보았는데 복잡한 SQL문을 처리하고 싶을 수 있다. SQL문의 꽃이라고 볼 수 있는 select, from, where등을 사용할 수 있도록 하는 메소드가 쿼리메소드이다. // repository/UserRepository.java public interface UserRepository extends JpaRepository { List findByName(String name); } 위 메소드를 정의하고 테스트해보자. // test/repository/UserRepositoryTest.java @SpringBootTest class UserReposi..

[스프링] 8. JPA

JPA (Java Persistence API) 현재 자바에서 ORM기술 표준으로 알려져 있다. 스프링만을 위한 것은 아니고 자바 전반적으로 사용되는 듯 하다. 지난 시간 도메인 객체를 만들 때 Id, GeneratedValue, Entity 어노테이션이 그 예이다. 메소드명 의미 save 객체 하나를 삽입한다. saveAll 여러개의 객체를 동시에 삽입한다. findById 특정 Id를 가진 객체를 검색한다.(Optional로 반환) findAll 테이블에 존재하는 모든 객체를 검색한다. deleteById 해당하는 Id를 가진 객체를 삭제한다. deleteAll 모든 객체를 삭제한다.(위험) delete 해당 객체를 삭제한다. deleteAllInBatch 모든 객체를 삭제하는데 한번의 SQL만 호출..

[알고리즘] Codeforces Round #811 (Div. 3)

오랜만에 코드포스 컨테스트 글을 올려보려고 한다. rated대회는 무서워서 못치겠고 버추얼을 돌리면서 실력을 키우고 도전하려고 한다.(그리고 파란색이 너무 예뻐서 유지하고 싶다.) Codeforces Round #811 (Div. 3) A - Everyone Loves to Sleep [Solved!] 현재 시간이 주어지고 $n$개의 시간이 주어질 때 현재 시간 이후의 시간 중 가장 빠른 시간과의 차이를 구하는 문제이다. 시간을 분으로 고쳐서 정렬한 후 완전탐색 해서 구하면 된다. 다만 현재 시간이 주어진 시간보다 뒤일 수 있으므로 주어진 시간중 가장 빠른 시간에서 $24 \times 60 = 1440$을 더해 맨 뒤에 추가한 후 탐색한다. B - Remove Prefix [Solved!] 앞에서부터 몇..