PS 31

[백준 파이썬(python) 1260번 문제] (DFS와 BFS)

문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 출력 첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다. ..

PS 2023.08.24

[백준 파이썬(python) 2606번 문제] (바이러스)

문제 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다. 어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수..

PS 2023.08.24

[백준 파이썬(python) 2217번 문제] ( 로프 )

문제 더보기 문제 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다. 각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 입력 첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로..

PS 2023.08.21

[백준 파이썬(python) 1449번 문제] (수리공 항승)

더보기 문제 항승이는 품질이 심각하게 나쁜 수도 파이프 회사의 수리공이다. 항승이는 세준 지하철 공사에서 물이 샌다는 소식을 듣고 수리를 하러 갔다. 파이프에서 물이 새는 곳은 신기하게도 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다. 항승이는 길이가 L인 테이프를 무한개 가지고 있다. 항승이는 테이프를 이용해서 물을 막으려고 한다. 항승이는 항상 물을 막을 때, 적어도 그 위치의 좌우 0.5만큼 간격을 줘야 물이 다시는 안 샌다고 생각한다. 물이 새는 곳의 위치와, 항승이가 가지고 있는 테이프의 길이 L이 주어졌을 때, 항승이가 필요한 테이프의 최소 개수를 구하는 프로그램을 작성하시오. 테이프를 자를 수 없고, 테이프를 겹쳐서 붙이는 것도 가능하다. 입력 첫째 줄에 물이 새는 곳의 개수 N과 테이프의..

PS 2023.08.21

[백준 파이썬(python) 11047번 문제] (동전 0)

문제 더보기 문제 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 출력 첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 설명 Ai 가 Ai-1의 배수이기 때문에 그리디로 풀 수 있는 문제 큰 금액의 동전부터 나눠가면 되는 문제 코드 import sys N, M = map(..

PS 2023.08.21

[백준 파이썬(python) 2231번 문제] (분해합)

더보기 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. 설명 완전탐색 문제 1부터 입력받은 숫자까지 돌리면서 그 합계를 구해 생성자를 찾는 ..

PS 2023.08.18

[백준 파이썬(python) 2309번 문제] (일곱 난쟁이)

문제 설명 완전탐색 문제 for문을 7번을 돌던지(7명을 뽑아서 100되는지 확인), 2번을 돌던지(2명을 뽑아서 총합에서 제외했을때 100 되는지 확인) 해야하는 문제 하지만 사기 파이썬은 조합 기능을 지원함 combination(배열,뽑을 수) 코드 import sys from itertools import combinations heights = [] for _ in range(9): height = int(sys.stdin.readline()) heights.append(height) for i in combinations(heights, 7): if sum(i) == 100: for j in sorted(i): print(j) break 주의할 점은 답을 찾은 직후 break로 프로그램 종료해야..

PS 2023.08.17

[백준 파이썬(python) 14425번 문제] [문자열 집합]

문제 설명 N개의 문자를 받아 집합에 담고(리스트도 가능할 듯하다) M개의 문자를 받을 때마다 집합에 있는지 확인해서 카운트하면 되는 문제 코드 import sys N, M = map(int, sys.stdin.readline().split()) a = set() cnt = 0 for _ in range(N): word = sys.stdin.readline().rstrip() a.add(word) for _ in range(M): word = sys.stdin.readline().rstrip() if word in a: cnt += 1 print(cnt)

PS 2023.08.17

[백준 파이썬(python) 1620번 문제] [나는야 포켓몬 마스터 이다솜]

문제 설명 딕셔너리를 사용하는 문제 포켓몬 도감을 딕셔너리에 저장할때 키: 밸류 쌍을 밸류: 키 로 봐꿔서 포켓몬당 2번 저장해서 푸는 방식 (다만 이게 최선의 방법인지는 잘 모르겠음, 밸류를 입력해서 해당하는 키들을 반환하는 기능을 넣어주면 안되나...? db를 다루는 사람들은 이 문제를 어떻게 해결할까?) 코드 import sys N, M = map(int, sys.stdin.readline().split()) pokemons = dict() for i in range(1, N + 1): pokemon = sys.stdin.readline().rstrip() pokemons[str(i)] = pokemon pokemons[pokemon] = str(i) for j in range(M): ipt = s..

PS 2023.08.17