2024/05 24

[백준] 2606 - 바이러스

문제https://www.acmicpc.net/problem/2606웜 바이러스는 네트워크를 통해 전파되기 때문에 한 컴퓨터가 웜 바이러스에 걸리면 네트워크 상에서 연결된 모든 컴퓨터가 웜 바이러스에 걸린다.예로 들어 그림 1과 같은 네트워크가 있다고 할 때, 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번, 5번 컴퓨터를 거쳐 3번, 6번 컴퓨터까지 전파된다. 즉, 2번, 3번, 5번, 6번 컴퓨터가 웜 바이러스에 걸리게 된다.컴퓨터의 수와 네트워크 상에서 직접 연결되어 있는 컴퓨터의 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의의 수를 구하여라.입력으로는 첫째 줄에 컴퓨터의 수가, 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어진다. 이후로 ..

[백준] 2178 - 미로탐색

문제문제 : https://www.acmicpc.net/problem/2178N X M 크기의 배열로 표현되는 미로가 있다.101111101010101011111011미로에서 1은 이동할 수 있는 칸이고, 0은 이동할 수 없는 칸이다. 이 미로에서 (1, 1)에서 출발해 (N, M)으로 이동할 때 지나야 하는 최소 칸의 개수를 구하는 프로그램을 작성하라. 한 칸에서 다른 칸으로 이동할 때는 서로 인접한 칸으로만 갈 수 있다.입력의 첫째 줄에는 두 정수 N, M이 주어지고, 다음 N개의 줄에 M개의 정수가 붙어서 입력으로 주어진다. 또한 항상 도착 위치로 이동할 수 있는 경우만 고려한다.  2024.05.10-[프로그래머스] 게임 맵 최단거리와 동일한 형태의 BFS 문제이다. 게임 맵 최단거리에서 불필요한..

Algorithm 2024.05.30

[프로그래머스] 게임 맵 최단거리

문제문제 : https://school.programmers.co.kr/learn/courses/30/lessons/1844ROR 게임은 두 팀으로 나눠서 진행하는데, 상대 팀의 진영을 먼저 파괴하면 이긴다. 즉, 각 팀은 상대 팀 진영에 빠르게 도착해야 한다. 아래 그림은 당신의 팀 캐릭터(행 :1, 열 : 1), 상대 팀의 진영(행: 5, 열: 5) 그리고 게임의 맵(5 X 5)을 표현한 것이다.맵에서 검은 부분은 벽으로 막혀 갈 수 없는 길이고, 흰 부분이 갈 수 있는 길이다. 캐릭터는 동서남북으로 한 칸씩 이동하되 맵을 벗어날 수는 없다. 만약 상대 팀 진영이 벽으로 막혀있다면 상대 팀 진영에 도착할 수 없다.게임의 맵을 이차원 배열 maps 매개변수로 전달받을 때, 캐릭터가 상대 팀 진영에 도착..

Algorithm 2024.05.30

[알고리즘] 너비 우선 탐색(BFS) 이란

너비 우선 탐색너비 우선 탐색(Breadth First Search)이란 그래프 탐색 방법 중 하나로, 임의의 시작 정점을 방문한 후 인접한 모든 정점을 우선 방문하는 방법이다. 갈림길에 연결되어 있는 모든 길을 탐색한 뒤, 다시 연결되어 있는 모든 길을 넓게 탐색하는 방법이다.그래프 내 모든 간선의 가중치가 같으면 너비 우선 탐색으로 찾아낸 두 점 사이의 경로는 최단 경로에 해당한다. 따라서 두 점 사이의 최단 경로 또는 임의의 경로를 찾고 싶을 때 너비 우선 탐색을 사용한다. 보통 너비 우선 탐색에 대해 찾아보면 트리 형태의 그래프 탐색이 가장 흔하게 보이는데, 트리 형태가 아닌 그래프에도 사용할 수 있다. 또는 미로 찾기와 같은 이차원 배열에도 사용할 수 있다.   동작 방식너비 우선 탐색은 방문한..

Algorithm 2024.05.29

[Python] Pickle - 객체 직렬화/역직렬화

개요2023.10.11-[Airflow] Dag 직렬화 (Serialization)에서 살펴보았는데, 직렬화(Serialization)란 데이터 구조나 객체 상태를 나중에 재구성할 수 있는 형식으로 변환하는 과정을 말한다. 다르게 말하면 객체를 바이트 스트림으로 인코딩하는 과정으로, 직렬화된 데이터는 동일하거나 다른 환경에 저장될 수 있다. 반대로 직렬화된 데이터를 개체나 데이터 구조로 다시 재구성하는 과정, 또는 인코딩 되어있는 바이트 스트림으로부터 객체를 복원하는 과정을 역직렬화(Deserialization)라고 한다. Python에서는 Pickle 라이브러리를 사용하여 데이터 직렬화/역직렬화를 수행한다. 이 글에서는 Pickle 라이브러리 사용법을 간단히 적어둔다.  PicklePickle은 Pyt..

Python 2024.05.28

[Windows 10] 원격 데스크톱의 비밀번호 변경

개요원격 데스크톱을 사용해 원격 컴퓨터 계정의 비밀번호를 변경해야하는데, 자주 수행하지 않다보니 매번 단축키를 까먹어서 적어둔다.   로컬 컴퓨터 비밀번호 변경로컬 컴퓨터의 비밀번호를 변경할 때는 키보드의 ctrl + alt + del을 눌러 작업 관리자나 윈도우 보안을 불러온다.위의 화면에서 암호 변경을 클릭하면 아래와 같이 암호를 변경할 수 있다.   원격 데스크톱 비밀번호 변경원격 데스크롭에 진입한 상태에서 ctrl + alt + del을 입력하면 원격 컴퓨터의 윈도우 보안을 불러올 것 같지만 실제로는 로컬 컴퓨터의 윈도우 보안을 불러온다.원격 컴퓨터의 윈도우 보안을 불러오기 위해서는 ctrl + alt + end를 입력하면 된다. 이후로는 로컬 컴퓨터와 동일한 방식으로 비밀번호를 변경할 수 있다...

Windows 2024.05.27

[Jenkins] Build 히스토리 삭제 - 3

개요Jenkins Job 별로 빌드 히스토리를 관리하는 것에 대해서는 2021.05.23-[Jenkins] Build 히스토리 삭제 - 1, 2021.12.01-[Jenkins] Build 히스토리 삭제 - 2 글에서 살펴본 적이 있었다. 그런데 최근 주변에서 Jenkins 빌드 히스토리로 인한 디스크 부족으로 대응하는 모습을 보면서 Job 별로 설정할 수 있는 Discard Old Builds에 대한 기본값을 설정해두면 좋을 것 같다는 생각을 하게 되었다. 관련해서 찾아보니 Jenkins 전체 대상으로 빌드 삭제 기능을 제공하는 플러그인 Build Discarder가 존재하는 것을 확인할 수 있었다. 이 글에서는 좀 더 효율적으로 Jenkins를 관리할 수 있도록 Build Discarder를 설정하는..

Jenkins 2024.05.24

[프로그래머스] 가장 많이 받은 선물

문제문제 : https://school.programmers.co.kr/learn/courses/30/lessons/258712친구들끼리 카카오톡 선물하기 기능을 사용해 선물을 주고받은 이번 달까지의 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하고 싶다.두 사람이 선물을 주고받은 기록이 있으면, 두 사람 사이에 더 많은 선물을 준 사람이 다음 달에 선물 하나를 받는다.두 사람이 선물을 주고받은 기록이 없거나 그 수가 같으면, 선물 지수가 큰 사람이 작은 사람에게 선물 하나를 받는다.선물 지수는 이번 달까지 자신이 친구들에게 준 선물의 수에서 받은 선물의 수를 뺀 값이다.두 사람의 선물 지수가 같으면 다음 달에 선물을 주고받지 않는다.위의 규칙대로 선물을 주고받을 때, 다음 달에 선물을 가장 ..

Algorithm 2024.05.23

[Airflow] TriggerDagRunOperator - 다른 Dag 트리거 하기

개요운영 중인 Airflow 환경에 아래와 같은 2개의 Dag가 동작 중이다.log_git_importer : 서버의 Git Working Directory 내 로그 파일을 원격 저장소로 Push 한다. 매 시 7분에 동작한다.inf_monitor : 운영 시스템 내 환경에서 모니터링이 필요한 지표를 파일로 생성한다. 매 시 10분에 동작한다.그런데 어느 순간부터 inf_monitor가 [Errno 116] Stale file handle 오류와 함께 간헐적으로 실패하는 경우가 생기기 시작했다. 확인해 보니 log_git_importer가 동작하는 도중에 inf_monitor가 동작하는 것이 오류가 발생하는 원인으로 보였다. 동시에 두 Dag가 동작하는 상황을 피하기 위해 실행 주기를 조정해보려고 했는데..

Apache Airflow 2024.05.22
1 2 3