목록Algorithm (23)
isPowerfulBlog
문제 주어진 문자열에서 중괄호와 대괄호가 짝을 이뤄야 함. 입력과 출력 입력 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다. 입력의 종료조건으로 맨 마지막에 점 하나(".")가 들어온다. 출력 각 줄마다 해당 문자열이 균형을 이루고 있으면 "yes"를, 아니면 "no"를 출력한다. 문제 해결 요약 문자열에서 왼쪽 괄호 등장하면 스택에 오른쪽 괄호 추가 문자열에서 오른쪽 괄호 등장하면 스택에서 pop한거와 비교해서 같다면 균형O 아니라면 균형X 코드 설명 import 및 입력받기 - from collections import deque imp..
문제 모음 최소 1개 이상, 자음 최소 2개 이상으로 총 l개의 단어 조합을 사전식으로 배열함 입력과 출력 입력 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. 출력 각 줄에 하나씩, 사전식으로 가능성 있는 암호를 모두 출력한다. 문제 해결 요약 입력 받은 단어들에서 자모음을 분리해 각각 자음리스트 모음리스트로 추가 모음조합과 자음조합으로 단어 생성 사전순 배열 및 출력 코드 설명 import 및 입력받기 - from itertools import combinations import sys input = sys.stdin.readline l, c = map(int, ..
문제 N(짝수) 명의 사람들을 스타트, 링크 팀으로 나누어 배정 팀에 i와 j가 소속되면 팀에 더해지는 능력치는 Sij + Sji 각각의 능력치들을 합하면 팀의 능력치 스타트 팀과 링크 팀의 능력치 차가 최소가 되도록 사람들을 분배하자. 입력과 출력 입력 첫째 줄에 N(4 ≤ N ≤ 20, N은 짝수)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100보다 작거나 같은 정수이다. 출력 첫째 줄에 스타트 팀과 링크 팀의 능력치의 차이의 최솟값을 출력한다. 문제 해결 요약 코드 설명 import 및 입력받기 - from itertools import combinat..
문제 y좌표 오름차순으로 좌표 정렬 y좌표가 같을 시, x 오름차순으로 좌표 정렬 입력과 출력 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 출력 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다. 문제 해결 요약 x 먼저 정렬하고 y 정렬 코드 설명 import 및 입력받기 좌표 정보 입력 - import sys input = sys.stdin.readline import heapq n = int(input()) heap = [] for _ in range(n): x, y = map(int, input..
문제 길이 N짜리 수열을 입력받아 이 수열의 부분수열의 합이 S가 되도록하는 부분수열의 개수를 구해보자 입력과 출력 입력 첫째줄에 수열의 길이 N과 부분수열의 합이 되어야하는 값 S를 입력받는다. 둘째줄에 수열을 입력받는다. 출력 합이 S가 되도록하는 부분수열의 개수를 출력한다. 문제 해결 요약 i개의 수열 조합에 대한 sum을 구해 -> 브루트포스 s와 같은지 확인 코드 설명 import 및 입력받기 수열 정보를 입력받는다. - from itertools import combinations import sys input = sys.stdin.readline n, s = map(int, input().split()) num = list(map(int, input().split())) 부분수열의 합 부분수..
문제 N * N 의 2차원 배열로 이루어진 도시 정보를 입력받는다. 0은 빈 칸, 1은 집, 2는 치킨집 주어진 치킨집들 중에서 도시 전체의 치킨 거리가 최소가 되게 하는 M개의 치킨집을 채택하여 그 최소가 되는 도시 전체의 치킨 거리를 구해보자 도시 전체의 치킨 거리는 각각의 집들의 치킨 거리 총합 각각의 집들의 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리 입력과 출력 입력 첫째 줄에 N(2 ≤ N ≤ 50)과 M(1 ≤ M ≤ 13)이 주어진다. 둘째 줄부터 N개의 줄에는 도시의 정보가 주어진다. 도시의 정보는 0, 1, 2로 이루어져 있고, 0은 빈 칸, 1은 집, 2는 치킨집을 의미한다. 집의 개수는 2N개를 넘지 않으며, 적어도 1개는 존재한다. 치킨집의 개수는 M보다 크거나 같고, 13보..
문제 행과 열의 길이인 n과 지역의 높이 정보를 나타내는 n * n 의 2차원 배열이 입력으로 주어졌을 때, 특정 높이 h 이하의 지역은 모두 물에 잠긴다고 한다. 물에 잠기지 않는 지역들이 상하좌우로 인접해 있고, 그 크기가 최대인 영역인 영역을 안전한 영역이라고 할 때, 특정 높이 h에서 안전한 영역의 개수가 최대가 된다. 안전한 영역의 최대 개수를 구해보자. 입력과 출력 입력 첫째 줄에는 어떤 지역을 나타내는 2차원 배열의 행과 열의 개수 n (2 = 0 and n > x+dx and x+dx >= 0: if area[y+dy][x+dx] > h and visited[y+dy][x+dx] != 1: visited[y+dy][x+dx] = 1 search(y+dy, x+dx, h) 인접한 좌표를 dx..