Algorithm/Codeforces 15

Educational Codeforces Round 133

A. 2-3 Moves code 문제 설명 0번에서 \(n\)번으로 이동하려고 한다. 현재 위치가 \(x\)일 때, \(x+2\), \(x+3\), \(x-2\), \(x-3\)으로 이동할 수 있다. \(n\)번으로 이동하기 위한 최소 이동 횟수를 출력해야 한다. 알고리즘 일단 \(n\)이 1인 경우는 2칸으로 예외 처리를 하였다. 만약 \(n\)이 3의 배수가 아니라면, \(\frac{n}{3}+1\)번 이동해야 한다. 계속 3칸씩 오른쪽으로 이동하다가, \(n\)을 3으로 나눈 나머지가 1이면 2칸씩 2번, 나머지가 2이면 마지막에 2칸 1번을 뛰어야 하기 때문이다. \(n\)이 3의 배수라면 단순히 3칸씩 계속 뛰면 된다. 따라서 뛰어야 하는 횟수는 \( frac{n+2}{3}\)이 된다. \(n\..

Codeforces Round #806 (Div. 4)

A. YES or YES? code 문제 설명 입력으로 들어온 문자열이 대소문자 구분하지 않고 yes인지 확인하는 문제이다. 알고리즘 입력으로 들어온 문자열이 3글자인지 확인하고, 3글자라면 글자가 각각 y, e, s인지 확인한다. B. ICPC Balloons code 문제 설명 문자열로 팀이 어떤 문제를 풀었는지 입력으로 주어진다. (어떤 팀이 풀었는지는 의미가 없으므로 주어지지 않는다.) 문제를 풀면 풍선을 하나 주지만, 처음으로 문제를 풀면 풍선 두 개를 준다. 모든 팀이 받는 총 풍선의 개수를 출력해야 한다. 알고리즘 먼저 문자열의 길이 만큼의 풍선을 주게 된다.그리고 문자열에 있는 알파벳의 종류 개수만큼 추가적으로 풍선을 주게 된다. C. Cypher code 문제 설명 먼저 처음 자물쇠가 어..

Codeforces Round #805 (Div. 3)

A. Round Down the Price code 문제 설명 숫자 \( n\)이 주어진다. \(n\)이하의 \(10^k\)꼴 (\(k\)는 음이 아닌 정수)인 수 중 가장 큰 수를 구한 뒤 \(n-10^k\)를 출력하는 문제이다 알고리즘 단순 구현 문제이다. 반복문을 이용하여 \(n\)이 넘을 때까지 1에서 10씩 곱해나가고, \(n\)을 넘기면 10으로 나눈다. 이 수가 \(n\) 이하의 수 중 최대인 \(10^k\)꼴의 수이다. B. Polycarp Writes a String from Memory code 문제 설명 하루에 최대 3종류의 글자만 적을 수 있다. 문자열 \(s\)가 주어지고 맨 앞글자부터 마지막 글자까지 순서대로 적을 때, \(s\)를 적기 위해 최대 며칠이 걸리는 지 출력해야 한다..

Codeforces Round #789 (Div. 1)

A. Tokitsukaze and Strange Inequality code 1) 문제 해설 길이가 \(n \leq 5000\) 인 순열 \(p\)가 주어질 때 \( 1 \leq a p_d \)를 만족하는 \( (a, b, c, d) \) 쌍의 개수를 구하는 문제이다. 2) 알고리즘 \(cnt[i][j] \)를 \( p_1\)부터 \(p_i\)까지의 수 중, \(j \) 이하인 수의 개수라고 정의하자. \( cmt\)를 전처리해 놓으면 특정 구간 \( [a, b]\)에서 \( k\) 이하인 수의 개수를 \( O(1) \) 안에 구할 수 있다. \(b, c\)를 고정해두고 생각해보자. 그렇다면 위 조건을 만족하는 \(a \)의 ..

Codeforces Round #788 (Div. 2)

A. Prof. Slim code 1) 문제 설명 길이 10,000 이하의 숫자로 이루어진 배열이 주어질 때, 부호가 서로 다른 두 숫자를 골라, 수 숫자의 부호를 바꿀 수 있다. 이 과정을 여러 번 반복해서 배열을 정렬할 수 있는지 물어보는 문제이다. 2) 알고리즘 먼저 배열에 음수의 개수가 \( k \) 개라 하자. 배열의 모든 숫자에 절댓값을 취하고, 배열 앞의 \( k \) 개의 수에 -1을 곱해준다. 그 후 배열이 정렬되어 있는 지 확인하면 된다. B. Dorms War code 1) 문제 설명 문자열 \(s\)와 특별한 문자 \(c\)가 \(k\) 개 주어진다. 이때 아래 작업을 진행해서 \(s\)의 문자열 중 일부 문자를 지운다. 1. 문자열 \(s\)에서 특별한 문자에 해당하는 모든 위치 ..