We will find a way, we always have.

-interstellar

전체 글 303

[알고리즘] 서로소 집합 알고리즘 (Union-Find)

서로소 집합 (Disjoint Sets) 서로소 집합은 공통 원소가 없는 두 집합을 의미한다. A = {1, 2} 와 B = {3, 4} 가 있다면 두 집합은 서로소 관계이다. 서로소 집합 자료구조란 서로소 부분들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조다. 서로소인지 판별하려면 union과 find 연산이 필요하다. union연산은 두 집합을 하나의 집합으로 합치는 연산이고 find 연산은 어떤 원소가 주어졌을 때 이 원소가 속한 집합의 대표를 찾는 연산이다. 즉 find 를 통해 주어진 두 집합의 대표를 비교하여 서로 서로소인지 확인이 가능 한 것이다. 때문에 서로소 집합 자료구조는 유니온파인드(Union-Find)라고도 불리운다. 집합 {1, 2, 3, 4, 5, 6}이 있고 여기에 un..

[백준] 11780번: 플로이드 2 - Python

🔈 문제 n(1 ≤ n ≤ 100)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1 ≤ m ≤ 100,000)개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다. 모든 도시의 쌍 (A, B)에 대해서 도시 A에서 B로 가는데 필요한 비용의 최솟값을 구하는 프로그램을 작성하시오. 📝입력 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 버스의 정보는 버스의 시작 도시 a, 도착 도시 b, 한 번 타는데 필요한 비용 c로 이루어져 있다. 시작 도시와 도착 도시가 같은 경우는 없다. 비용은 100,000보다 작거나 ..

[자바] 변수 1 (feat. 개발자 두 명이 자리를 바꾸는 데 필요한 의자 갯수는?)

수학에서의 변수는 상수의 반대로써 "변하는 수"라고 정의되지만 프로그래밍 언어에서의 변수는 값을 저장할 수 있는 메모리상의 공간을 일컫는다. 그래프도 수학과 자료구조에서의 정의가 다른 것 처럼ㅎ 변수를 선언하면 메모리에 공간을 만드는 것이다. 자바의 변수 선언과 초기화는 다음과 같이 한다. HTML 삽입 미리보기할 수 없는 소스 우선 변수를 선언한 다음에 초기화를 할 수 있다. 초기화란 선언된 변수에 유효한 값을 넣어주는 것인데, 만약 초기화를 하지 않았다면 그 변수에는 쓰레기값이 들어가게 되고 사용할 수 없게 된다. 변수를 사용하고자 한다면 변수 선언 후 초기화를 해주자!! 두 변수의 값 교환하기 개발자 밈 중에 개발자 두 명이 자리를 바꾸는 데 필요한 의자 갯수는? 이라는 밈이 있다. 상식적으로 생각..

[자바] 세상과 인사하기

JAVA의 정석이라는 도서와 자바를 부탁해 라는 도서로 자바에 대해 공부를 시작하였다. 해당 도서의 사용 IDE는 이클립스였지만, 주변 사람들의 추천으로 IDE는 인텔리제이를 설치하게 되었다. C 배웠던 것 처럼 파이썬과는 다르게 지정해줘야할 것이 조금 많았다. 자바 코드를 작성하면 컴파일러가 바이트코드로 변역해준다. 이 과정을 컴파일링이라고 한다. 변역된 바이트코드는 자바 가상 기계(JVM)를 통해 기계어로 실시간 통역된다.(인터프리팅) 이렇게 자바는 프로그래밍 과정 중 컴파일링과 인터프리팅 모두 사용하는데 이것이 자바의 특징이다. 때문에 다양한 환경에서 동작하는 특징을 갖는다. 이제 자바 코드를 작성해보자!!! 단순히 출력 파일을 작성하기 위해서도 프로젝트를 생성해서 클래스를 만들고 메인 메소드 작성..

[백준] 14567번: 선수과목 (Prerequisite) - 파이썬

🔈 문제 올해 Z대학 컴퓨터공학부에 새로 입학한 민욱이는 학부에 개설된 모든 전공과목을 듣고 졸업하려는 원대한 목표를 세웠다. 어떤 과목들은 선수과목이 있어 해당되는 모든 과목을 먼저 이수해야만 해당 과목을 이수할 수 있게 되어 있다. 공학인증을 포기할 수 없는 불쌍한 민욱이는 선수과목 조건을 반드시 지켜야만 한다. 민욱이는 선수과목 조건을 지킬 경우 각각의 전공과목을 언제 이수할 수 있는지 궁금해졌다. 계산을 편리하게 하기 위해 아래와 같이 조건을 간소화하여 계산하기로 하였다. - 한 학기에 들을 수 있는 과목 수에는 제한이 없다. - 모든 과목은 매 학기 항상 개설된다. 모든 과목에 대해 각 과목을 이수하려면 최소 몇 학기가 걸리는지 계산하는 프로그램을 작성하여라. 📝입력 첫 번째 줄에 과목의 수 N..

[백준] 5427번: 불 - 파이썬

🔈 문제 상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다. 매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에는 불이 붙지 않는다. 상근이는 동서남북 인접한 칸으로 이동할 수 있으며, 1초가 걸린다. 상근이는 벽을 통과할 수 없고, 불이 옮겨진 칸 또는 이제 불이 붙으려는 칸으로 이동할 수 없다. 상근이가 있는 칸에 불이 옮겨옴과 동시에 다른 칸으로 이동할 수 있다. 빌딩의 지도가 주어졌을 때, 얼마나 빨리 빌딩을 탈출할 수 있는지 구하는 프로그램을 작성하시오. 📝입력 첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스는 최대 100개이다. 각 테스트 케이스의 첫째 줄에는 빌딩 지도의 너비와 높이 w와 h가 주..

[2023 카카오 신입 개발자 공채] 첫 입사 지원

2023 카카오 신입 개발자 공채 모집이 시작되었다 두둥 역시 갓카오 답게 블라인드 공채이다. 아묻따 1차 코테 보고, 1차 합격한 사람들에 한해서 CS테스트를 보고 2차 코테를 본다. 일정은 다음과 같다. 9월 24 2023 KAKAO BLIND RECRUITMENT 1차 코딩테스트 22년 09월 24일 14:00 ~ 09월 24일 19:00 10월 8일 2023 KAKAO BLIND RECRUITMENT 2차 CS테스트 22년 10월 08일 13:30 ~ 10월 08일 13:45 10월 8일 2023 KAKAO BLIND RECRUITMENT 2차 코딩테스트 22년 10월 08일 14:00 ~ 10월 08일 19:00 1차 코딩테스트 시간은 5시간 동안 진행된다... 대박.. 과연 몇문제나 풀 수 있..

Blah blah 2022.09.07

[백준] 2174번: 로봇 시뮬레이션 - 파이썬

🔈 문제 가로 A(1≤A≤100), 세로 B(1≤B≤100) 크기의 땅이 있다. 이 땅 위에 로봇들이 N(1≤N≤100)개 있다. 로봇들의 초기 위치는 x좌표와 y좌표로 나타난다. 위의 그림에서 보듯 x좌표는 왼쪽부터, y좌표는 아래쪽부터 순서가 매겨진다. 또한 각 로봇은 맨 처음에 NWES 중 하나의 방향을 향해 서 있다. 초기에 서 있는 로봇들의 위치는 서로 다르다. 이러한 로봇들에 M(1≤M≤100)개의 명령을 내리려고 한다. 각각의 명령은 순차적으로 실행된다. 즉, 하나의 명령을 한 로봇에서 내렸으면, 그 명령이 완수될 때까지 그 로봇과 다른 모든 로봇에게 다른 명령을 내릴 수 없다. 각각의 로봇에 대해 수행하는 명령은 다음의 세 가지가 있다. 1. L: 로봇이 향하고 있는 방향을 기준으로 왼쪽으..

[마크다운] 작성해보기

마크다운(Markdown)이란 2004년 UI 디자이너이자 기술 블로거인 존 그루버에 의해 발명된 텍스트 기반의 마크업 언어다. 작성하기도 간편하고 가독성도 뛰어난 언어이다. 확장자는 .md 인데 깃허브에서도 많이 보았던 그 README.md의 .md다. 마크다운의 장점은 메모를 작성하거나 웹 사이트용 콘텐츠를 만들고 인쇄 가능한 문서를 생성하기 쉽고 빠르다는 것이다. 또 배우는데도 오래 걸리지 않는다. 이제 마크다운의 문법을 알아보자!!! Heading 문서의 제목이나 소제목을 작성할 때 사용된다. HTML 삽입 미리보기할 수 없는 소스 Heading 1 Heading 2 heading 3 heading 4 heading 5 heading 6 Paragraph 이런식으로 결과물이 나온다. #은 1개부터..

Skills 2022.09.04

[도커] 바인드 마운트(Bind Mounts)

도커 이미지가 생성될 때, 이들 폴더의 스냅샷만 복사하기 때문에 생성된 후 html 파일을 변경하여도 이미지나 컨테이너에 변경사항이 반영이 되지 않는다. 이는 개발에 있어 치명적이다. 새로운 변경사항이 생겼을 때 항상 모든 것을 다시 시작해야하기 때문이다. 이런 문제점을 해결해주는 것이 바로 바인드 마운트이다. 소스 코드를 바인드 마운트에 넣으면 컨테이너는 이를 인식하여소스 코드를 실제로 스냅샷에서 복사하는 것이 아니라 바인딩 마운트에 복사한다. 그래서 컨테이너는 항상 최신 코드를 엑세스 할 수 있게 된다. 바인드 마운트는 영구적이고 편집 가능한 데이터에 적합하다. 볼륨은 영구적이긴 하지만 호스트 머신에서의 저장 위치를 모르기에 편집은 불가능하다. 바인드 마운트 실행은 터미널에서 가능하다. 이렇게 절대 ..

DevOps/도커 2022.09.02