본문 바로가기

전체 글

(16)
Anri - Last Summer Whisper 二人の愛は戻りはしないけど せめてあなたを憎みたくはないの
Google Code Jam Qualification Round 후기 A번 : 7점 B번 : 5 + 11점 C번 : 7 + 12점 D번 : 1 + 9 + 16점 E번 : 7 + 25점 총 27시간동안 진행됐으며 30점이 넘으면 1 Round 진출 C번의 첫번째 테스트 케이스까지 맞으면 된다. A번 k는 시키는대로 간단하게 더한다. r과 c는 set으로 원소의 갯수를 새고 그게 N개인지 세면 된다. (이 문제는 E번과 이어진다.) T = int(input()) for case in range(1, T + 1): N = int(input()) M = [list(map(int,input().split())) for _ in range(N)] k = sum(M[i][i] for i in range(N)) r = sum(len(set(M[i])) != N for i in range..
Codeforces Global Round 7 후기 A. Bad Ugly Numbers n = 1일 때 -1을 출력하고 나머지는 23, 223, 2233, 22223, 222223, 2222233, .... n-1개의 2와 1개의 3으로 채우는데 수의 합이 3의 배수가 되면 3의 갯수를 한개 늘린다. B. Maximums b_i = a_i - x_i이고 b1 = a1이므로 모든 b_i에 대해서 a_i = 최댓값 + b_i이며 b_i 0 이면 a_i가 최댓값보다 크므로 최댓값을 갱신한다. C. Permutation Partitions 1...k번째 최댓값은 무조건 포함하도록 segment를 나눠야한다. 그래서 1...k번째 최댓값을 m_1, m_2, ... , m_k라고 하고 m_i와 m_i+1 사이의 경계를..
최대 유량 알고리즘(maximum flow algorithm) 전체적인 내용 수정 예정입니다. 최근에 제대로 다시 공부했는데 개인적으로 introduction to algorithm에 있는 설명이 훨씬 좋더군요. 종만북에서 유량의 속성으로 유량의 대칭성을 소개하는데 그것보다 residual network를 설명하는 편이 더 이해하기 좋을거같아요. 유량 네트워크에서 역방향 간선에 flow를 뺀다는건 너무 뜬금없게 느껴졌거든요.. 보니까 역방향 간선에 flow를 뺀다는게 사실 유량 네트워크의 속성이기보다는 포드-풀커슨에서 cancelling을 구현하기 위함이고 introduction to algorithm에서는 유량의 대칭성 같은 속성이 있다고는 하지 않더라고요. 서론 먼저 최단 경로 알고리즘(Shortest Path Algorithm)과 대조하며 새로운 지식으로 확장..
[BOJ 16639] 괄호 추가하기 3 https://www.acmicpc.net/problem/16639 16639번: 괄호 추가하기 3 첫째 줄에 수식의 길이 N(1 ≤ N ≤ 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가 번갈아가면서 나온다. 연산자는 +, -, * 중 하나이다. 여기서 *는 곱하기 연산을 나타내는 × 연산이다. 항상 올바른 수식만 주어지기 때문에, N은 홀수이다. www.acmicpc.net 1. 연산자 우선순위 O 2. 연산자의 갯수 여러개 가능 3. 괄호의 중첩 O 3번 조건에 의해서 1번, 2번 조건은 신경 안써도 괜찮다. 1번 -> 우선순위는 괄호를 쳐서 무시하면 되고 ex) 1 + 3 * 2 ->..
[BOJ 2263] 트리의 순회 https://www.acmicpc.net/problem/2263 2263번: 트리의 순회 첫째 줄에 n(1≤n≤100,000)이 주어진다. 다음 줄에는 인오더를 나타내는 n개의 자연수가 주어지고, 그 다음 줄에는 같은 식으로 포스트오더가 주어진다. www.acmicpc.net in order : L root R post order : L R root pre order : root L R post의 마지막은 root다. 1. post-order에서 현재 범위에서 루트가 어떤 노드인지 파악한다. 2. in-order에서 왼쪽 서브트리와 오른쪽 서브트리의 범위를 파악한다. 3. 루트를 출력하고 각 서브트리가 있다면 재귀호출한다. import sys sys.setrecursionlimit(10**9) inpu..
Codeforces Round #603 (Div. 2) 후기 A. Sweet Problem for _ in range(int(input())): t = list(map(int,input().split())) t.sort() a,b,c = t d = c - b if d < a: c -= (d + (a-d)//2) b -= ((a-d) - (a-d)//2) else: c -= a print(a + min(b,c)) B. PIN Codes for _ in range(int(input())): N = int(input()) card = {} t = [] for i in range(N): q = input() if q not in card: card[q] = 1 else:card[q] += 1 t.append(q) cnt = 0 for i in range(N): if ca..
Codeforces Round #599 (Div. 2) 후기 [푼 문제] - A, B1, C A. Maximum Square 널판지(planks)로 만들 수 있는 최대 정사각형의 한변의 길이를 구하는 문제. 내림차순 정렬하고 인덱스와 비교하면서 한번 훑으면 된다. import sys input = sys.stdin.readline for _ in range(int(input())): N = int(input()) k = list(map(int, input().split())) k.sort(reverse=True) ans = 0 for i in range(N): if k[i] = N: ans = i+1 print(ans) B1. Character Swap (Easy Version) 두 문자열의 문자를 '최..