본문 바로가기
728x90

BAEKJOON41

[BOJ/Python] 1208. 부분수열의 합2 📌 문제 https://www.acmicpc.net/problem/1208 1208번: 부분수열의 합 2 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 40, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 📌 문제 접근 방법 시간 초과를 피하기 위해 리스트를 2개로 나누어 준다. (N의 최대값은 40으로, 나누지 않고 부분집합을 구할 경우 2^40번의 연산이 필요하다. 둘로 나눌 경우, 2^20 + 2^20번의 연산으로 줄일 수 있다.) left, right로 나눈 두 개의 부분집합에 대해서 나올 수 있는 합의 경우의 수를 구한다. 투 포인터를 활용하.. 2021. 10. 8.
[BOJ/Python] 16234. 인구 이동 📌 문제 https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 📌 문제 접근 방법 우선, 첫 번째 인구 이동이 일어나는 과정을 먼저 구현해보았다. 방문한 적이 없는 곳이면 bfs(find_unit 함수)를 통해 연합을 구성하고 → 연합의 길이가 1보다 크다면 인구이동이 일어나므로 move함수를 통해 인구를 이동시킨다. 위의 코드를 이용해서 인구 이동이 더 이상 일어날 수 없을 때까지 인구 이동을 진행하고, 인구 이동이 일어날 때 마다 .. 2021. 10. 7.
[BOJ/Python] 1240. 노드사이의 거리 📌 문제 https://www.acmicpc.net/problem/1240 1240번: 노드사이의 거리 N(2≤N≤1,000)개의 노드로 이루어진 트리가 주어지고 M(M≤1,000)개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라. www.acmicpc.net 📌 문제 접근 방법 인접 행렬을 만들고 노드 간 연결이 된 곳에 거리를 저장! → 시간 초과 인접 리스트로 바꾸고 리스트에 연결된 노드번호와 거리를 함께 저장 후 bfs로 탐색 인접 행렬로 그래프 탐색을 하는 경우 시간 초과가 될 때가 종종 있어서 인접 리스트를 우선적으로 쓰는 것이 좋을 것 같다! 📌 코드 from collections import deque def distance(x, y): queue = deque() queue.. 2021. 10. 4.
[BOJ/Python] 1339. 단어 수학 📌 문제 https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 📌 문제 접근 방법 처음에는 맨 앞에 나온 알파벳에 가장 큰 숫자를 대입했다. 하지만, ''' 10 ABB BB BB BB BB BB BB BB BB BB '''​ 이러한 입력 값이 들어온다면 틀리게 된다. 따라서, 각 자리수마다 들어오는 알파벳을 리스트에 넣고 해당 자리의 값을 곱하여 계산하였다. 계산값이 가장 큰 값부터 큰 숫자를 대입하면 가장 큰 숫자를 찾을 수 있다. 📌 코드.. 2021. 10. 4.
728x90