목록Computer Science/Algorithm (244)
DHistory
문제 20365번: 블로그2 neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한 www.acmicpc.net 풀이 import re n = int(input()) text = input() def solution(text): # 연속으로 나온 문자는 하나의 문자로 변경한다. for value in ['B', 'R']: standard = '(' + value + '){2,}' text = re.sub(r'{}'.format(standard), value, text) # 둘 중 많은 색으로 칠하기(1) + 나머지 칠하기 return 1 + min(text.count..
문제 5545번: 최고의 피자 첫째 줄에 토핑의 종류의 수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 도우의 가격 A와 토핑의 가격 B가 주어진다. (1 ≤ A, B ≤ 1000) 셋째 줄에는 도우의 열량 C가 주어진다. (1 ≤ C ≤ 10000) 다음 줄 www.acmicpc.net 풀이 """ 최고의 피자란, 피자가게에서 주문할 수 있는 피자 중 1원당 열량이 가장 높은 피자를 의미한다. 토핑 N에게서 여러 종류를 선택해서 주문할 수 있다. - 같은 종류의 토핑을 2개 이상 선택할 수는 없다. - 토핑을 전혀 선택하지 않을 수도 있다. A: 도우의 가격 B: 토핑의 가격 K: 토핑의 개수 피자의 가격 = A + B * k 피자의 열량 = 도우와 토핑의 열량의 합 1원당 열량을 출력 (소수점..
문제 1448번: 삼각형 만들기 첫째 줄에 빨대의 개수 N이 주어진다. N은 3보다 크거나 같고, 1,000,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 빨대의 길이가 한 줄에 하나씩 주어진다. 빨대의 길이는 1,000,000보다 www.acmicpc.net 풀이 """ N: 빨대의 개수 3개의 빨대를 선택 => 삼각형을 만들 수 있다면, 세 변의 길이의 합의 최댓값 삼각형 조건 가징 긴 변의 길이가 다른 두 변의 길이의 합보다 작은 경우 """ import sys n = int(sys.stdin.readline().rstrip()) edges = [] for _ in range(n): edges.append(int(sys.stdin.readline().rstrip())) def solu..
문제 19941번: 햄버거 분배 기다란 벤치 모양의 식탁에 사람들과 햄버거가 아래와 같이 단위 간격으로 놓여 있다. 사람들은 자신의 위치에서 거리가 $K$ 이하인 햄버거를 먹을 수 있다. 햄버거 사람 햄버거 사람 햄버거 사 www.acmicpc.net 풀이 """ 자신의 위치에서 거리가 K이하인 햄버거를 먹을 수 있다. N: 식탁의 길이 K: 햄버거를 선택할 수 있는 거리 햄버거를 먹을 수 있는 사람의 최대 수? HHPPP HPHPHPHP PHPPP """ n, m = map(int, input().split()) table = list(input())[:n] def solution(m, table): for i in range(len(table)): if table[i] == 'P': for j in ..
문제 2012번: 등수 매기기 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다. www.acmicpc.net 풀이 """ 학생들은 N명 중에 몇 등 할 지 예상 등수를 적었다. 각 사람이 제출한 에상 등수를 바탕으로 임의로 등수를 매기기로 했다. A등으로 예상하였는데 실제 등수가 B등이 될 경우 불만도 abs(A-B)이다. 불만도의 총 합의 최소는? 예상 순으로 정렬한다. 1 1 2 3 5 0 1 1 1 0 """ import sys n = int(sys.stdin.readline().rstrip()) rank = [] for _ in range(n): rank.appe..
문제 18310번: 안테나 첫째 줄에 집의 수 N이 자연수로 주어진다. (1≤N≤200,000) 둘째 줄에 N채의 집에 위치가 공백을 기준으로 구분되어 1이상 100,000이하의 자연수로 주어진다. www.acmicpc.net 풀이 """ 일직선 상의 집들이 있다. 한 개의 안테나를 설치하는데 효율성을 위해 안테나로부터 모든 집까지의 거리의 총 합이 최소가 되도록 설치하려고 한다. 안테나는 집이 위치한 곳에만 설치할 수 있고, 동일한 위치에 여러 개의 집이 존재하는 것이 가능하다. === example === N = 4 house = 1, 5, 7, 9 5에 위치 (4 + 0 + 2+ 4) = 10 => 중간에 위치하면 된다. 중간에 위치한 집이 왼쪽으로 가는 경우 왼쪽 집과 가까워지고 오른쪽 집과 동일..
문제 1783번: 병든 나이트 첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 """ 병든 나이트가 N x M 크기 체스판의 가장 왼쪽 아래 위치 병든 나이트 이동 범위 1. 2칸 위로 1칸 오른쪽 2. 1칸 위로 2칸 오른쪽 3. 1칸 아래로 2칸 오른쪽 4. 2칸 아래로 1칸 오른쪽 방문한 칸의 수 최대 이동 횟수가 4번보다 많다면, 이동 방법을 모두 한 번씩 사용 이동 횟수가 4번보다 많지 않다면, 제약 사항 x """ n, m = map(int, input().split()) def solution(n, m): # 나이트는 첫 칸을 차지하고 있음 answer = 1 # 위로 움직일 수 ..
문제 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 풀이 """ 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다. 길이가 L인 테이프를 가지고 있다. 물을 막을 때, 그 위치와 좌우 0.5만큼 간격을 줘야 물이 새지 않는다. 물이 새는 곳의 위치와, 테이프의 길이가 주어졌을 때 필요한 테이프의 최소 개수를 구하시오. 테이프를 자를 수 없고, 겹쳐서 붙이는 것도 가능한다. 4 3 1 2 4 5 2 """ n, l = map(int, input().split()) pipes = list(map(..
문제 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 풀이 """ N: 도시 개수 일직선 도로 위에 있다. 제일 왼쪽 도시에서 제일 오른쪽 도시로 자동차를 이용하여 이동 인접한 두 도시 사이의 도로는 길이가 다를 수 있다. (단위는 km) 도로를 이용하여 이동할 때 1km마다 1리터의 기름을 사용 각 도시에는 하나의 주유소가 있다. 도시마다 리터당 가격이 다름. === example === 4 2 3 1 5 2 4 1 1번 도시에서 2km를 넣고 달린다. => 5 * 2 = 10 2번 도시에서 4..
문제 17262번: 팬덤이 넘쳐흘러 선물 포장 공장을 말아먹은 욱제는 계곡에서 백숙을 파느라 학교에 자주 가지 못한다. 하지만 월클의 인생은 피곤한 법! 욱제는 지금처럼 힘든 시기에도 자신을 기다리는 5조5억명의 열렬한 팬 www.acmicpc.net 풀이 학교에 간 뒤 최소 시간동안 머물다가 모든 팬들과 한 번 씩 인사를 하고 학교를 떠남. === example === A: 1, 2, 3, 4 B: 2, 3, 4 C: 2, 3, 4, 5 => 학교에 가자마자 한번에 인사할 수 있음. A: 1, 2, 3, 4 B: 5, 6 => 4, 5 (학교에 머무는 시간의 총 합은 1) A에게 인사 후 B에게 인사하기 위해 시간이 필요함. """ import sys n = int(sys.stdin.readline()..