목록Algorithm (160)
alpyrithm_알파이리즘
2630 색종이 만들기 www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 문제 풀기 전 공부할 것 : 분할 정복, 재귀 풀이 1 해당 범위의 색종이 색이 모두 같은지 확인하는 check 함수를 정의한다. solve 함수를 통해 check 함수를 부르고 해당 범위의 색종이 색이 모두 같으면 색종이 개수를 추가하고 같지 않으면 색종이를 나눈다. import sys input = sys.stdin.readline n = int(input(..
15903 카드 합체 놀이 www.acmicpc.net/problem/15903 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 문제 풀기 전 공부할 것 : 자료 구조, 그리디 알고리즘, 우선순위 큐 풀이 우선순위 큐를 이용해서 해결한다. 우선순위 큐를 이용해서 카드들을 넣는다. 우선순위 큐를 이용해서 가장 작은 2개 카드를 꺼내서 더하고 2번 넣어준다. 위의 과정을 m번 반복하고 총합을 출력한다. import heapq n, m = map(int, input().split..
1269 대칭 차집합 www.acmicpc.net/problem/1269 1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net 문제 풀기 전 공부할 것 : 자료 구조, 집합과 맵 풀이 set을 이용하면 차집합을 구할 수 있다. 차집합의 합집합의 수를 출력하면 된다. n, m = map(int, input().split()) a = set(map(int, input().split())) b = set(map(int, input().split())) print(len(a-b)+len(b-a))
2161 카드1 www.acmicpc.net/problem/2161 2161번: 카드1 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제 풀기 전 공부할 것 : 구현, 자료 구조, 시뮬레이션, 덱, 큐 풀이 1 while문으로 cards에 카드가 남을 때까지 카드를 버리고, 제일 아래로 옮기는 작업을 반복한다. from collections import deque n = int(input()) cards = deque(list(range(1, n+1))) res = [] while cards: card = cards.popl..
1439 뒤집기 www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 문제 풀기 전 공부할 것 : 그리디 알고리즘 풀이 문자열 S를 같은 숫자가 연속되는 것을 한 개만 남기고 없앤다. 없애고 남은 숫자에서 0의 개수와 1의 개수를 센다. 작은 개수만큼 문자를 뒤집으면 같은 숫자로 만들 수 있다. s = input() n = len(s) change = [s[0]] for i in range(1, n): if s[i] != change[-1]: change.appe..
15904 UCPC는 무엇의 약자일까? www.acmicpc.net/problem/15904 15904번: UCPC는 무엇의 약자일까? 첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는 www.acmicpc.net 문제 풀기 전 공부할 것 : 그리디 알고리즘, 문자열 풀이 문자열을 입력받는다 string에 f라는 문자가 있으면 f의 index를 return 하고 없으면 -1을 return 하는 find 함수를 정의한다. 찾을 문자를 fs에 저장한다 string을 돌면서 U C P C가 차례로 있는지 확인한다. string에 해당 문자가 있다면 string을 해..
2810 컵홀더 www.acmicpc.net/problem/2810 2810번: 컵홀더 첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다. www.acmicpc.net 문제 풀기 전 공부할 것 : 구현, 그리디 알고리즘, 문자열 풀이 1 좌석이 n개 있고 모두 일반 좌석이라면 컵홀더를 n+1개 사용할 수 있다. 이때, 커플석이 l쌍(lx2) 있다면 l개만큼 컵홀더가 없어지게 된다. 따라서 n+1 - (l)이 컵홀더의 수이다. 컵을 컵홀더에 놓을 수 있는 최대 사람은 컵홀더의 수만큼 있거나 컵홀더의 수가 좌석보다 많다면 n개 가능하다. n = int(input()) seat = input() l = 0 for i in range(n): if seat[i] ==..
16486 운동장 한 바퀴 www.acmicpc.net/problem/16486 16486번: 운동장 한 바퀴 첫째 줄에 d1의 값이 주어진다. 둘째 줄에는 d2의 값이 주어진다. (d1, d2의 값은 100,000 이하의 양의 정수) www.acmicpc.net 문제 풀기 전 공부할 것 : 수학, 기하학 풀이 운동장의 둘레를 알아내는 것으로 A, B를 감싸는 원둘레와 C의 가로의 길이 2개를 더하면 된다. C의 가로의 길이가 d1이므로 d1 X 2와 A, B의 둘레의 길이 2 X 3.141592 X d2를 더한다. d1, d2 = int(input()), int(input()) print((d1+d2*3.141592)*2)