알고리즘 10

[BOJ] 2110번: 공유기 설치 (파이썬)

https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net - 두 공유기 사이의 거리는 첫 번째 집과 마지막 집 사이의 거리를 넘어갈 수 없기 때문에 end 를 첫 번째 집과 마지막 집 사이의 거리로 설정합니다. - mid 를 두 집 사이의 거리로 설정합니다. - 현재 집과 그다음 집 사이의 거리가 mid 보다 크거나 같다면, 공유기의 설치가 가능합니다. - 설치한 공유기의 개수 valid 를 1 증가시..

알고리즘 2022.05.01

[프로그래머스] 자물쇠와 열쇠 (파이썬)

https://programmers.co.kr/learn/courses/30/lessons/60059 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 열쇠 돌기 중 하나를 기준으로 하여 다른 돌기까지의 위치 변화를 리스트에 담아둡니다. 자물쇠의 홈 중 하나에 방금 기준으로 정한 열쇠 돌기를 넣고, 위치 변화에 대한 정보를 보고 다른 돌기를 전개합니다(현재 위치와 연결된 다른 돌기를 확인합니다). 그 과정에서 자물쇠의 돌기를 만난다면 중단합니다. 중단되지 않았다면, 자물쇠를 열쇠로 풀 수 있습니다. * solution - 열쇠의 돌기 개수를 계산합니다. - 자..

알고리즘 2022.04.23

[프로그래머스] 프린터 (파이썬)

https://programmers.co.kr/learn/courses/30/lessons/42587 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 문제에서 요구하는 인쇄 작업을 그대로 구현합니다. 대기목록을 관리하기 위하여 deque를 사용하였습니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. from collections ..

알고리즘 2022.04.22

[프로그래머스] 더 맵게 (파이썬)

https://programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 모든 음식의 스코빌 지수가 K 이상이 되려면 가장 낮은 스코빌 지수가 K 이상이 되면 됩니다. 힙을 사용하여 문제에서 주어진 방법으로 음식 섞기를 반복적으로 수행합니다. import heapq def solution(scoville, K): answer = 0 heapq.heapify(scoville) while scoville[0] < K and ..

알고리즘 2022.04.17

[BOJ] 1715번: 카드 정렬하기 (파이썬)

https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 보유하고 있는 카드 묶음 중에 가장 작은 두 개의 묶음을 비교해야 최소 횟수로 비교할 수 있습니다. 첫번째 원소가 항상 제일 작은 값이 되도록 유지하는 heapq 라이브러리를 사용합니다. 비교가 필요한 카드 묶음을 heapq에 넣어 관리합니다. 가장 작은 묶음과 그 다음으로 작은 묶음을 꺼내어 비교하고, 하나가 된 카드 묶음을 다시 heapq에 넣습니다. 카드 묶음이 1개 남을 때까..

알고리즘 2022.04.17

[BOJ] 18405번: 경쟁적 전염 (파이썬)

https://www.acmicpc.net/problem/18405 18405번: 경쟁적 전염 첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치 www.acmicpc.net 시험관에 존재하는 바이러스를 오름차순으로 목록에 넣고 하나씩 꺼내어 전파 결과를 적용합니다. 바이러스의 종류와 위치 정보, 그리고 시간 정보를 포함하는 배열 virus 을 준비합니다 바이러스의 전파는 번호가 낮은 순으로 이루어지기에 정렬을 수행합니다 virus를 deque로 변환하고 하나씩 꺼내어 4방향으로 전파를 수행합니다 다른 바이러스가 존재하거나 시험관을 벗어나..

알고리즘 2022.04.16

[BOJ] 18352번: 특정 거리의 도시 찾기 (파이썬)

https://www.acmicpc.net/problem/18352 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net 출발 도시부터 시작하여 방문 가능한 도시들로 이동하며 필요한 거리를 갱신합니다. 방문하지 않은 도시에 대한 거리는 -1로 초기화합니다 출발 도시까지의 거리는 0으로 초기화합니다 BFS 현재 도시 cur 에서 방문할 수 있는 도시 vertices[cur] 들을 확인합니다 아직 방문하지 않았다면(거리가 -1이라면) "현재 도시까..

알고리즘 2022.04.16

[프로그래머스] 기둥과 보 설치 (파이썬)

https://programmers.co.kr/learn/courses/30/lessons/60061 코딩테스트 연습 - 기둥과 보 설치 5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[ programmers.co.kr 각 작업을 기존의 구조물에 적용시키고, 건축물이 규칙을 만족하지 않는다면 작업을 취..

알고리즘 2022.04.16

[BOJ] 3190번: 뱀 (파이썬)

https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 뱀과 사과의 정보를 2차원 행렬에서 관리하지 않고, 각각의 좌표들을 담고 있는 목록으로 관리하였습니다. 뱀의 정보를 (y, x) 좌표의 목록 deque로 관리합니다 사과 정보 역시 (y, x) 좌표의 목록 list로 관리합니다 타이머를 증가시키며 아래의 조건에 따라 움직입니다 현재 진행방향으로 움직여서 보드를 벗어나는 경우 종료 현재 진행방향으로 움직여서 뱀을 만나는 경우 종료 앞선 2개의 종료 조건을 ..

알고리즘 2022.04.16

[프로그래머스] 문자열 압축 (파이썬)

https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr ​길이별로 문자열의 압축을 진행하고 그 결과의 길이를 비교하여 최솟값을 반환합니다. solution 길이가 1 인 경우, 아무 작업도 수행하지 않고 문자열을 그대로 반환합니다 길이가 2 이상인 경우, 1부터 "문자열의 길이-1"까지 숫자를 증가시키며 문자열 압축을 시도하고 최솟값을 반환합니다 compress 문자열을 특정한 길이로 압축합니다 문자열을 일정..

알고리즘 2022.04.16