2018/05/18

알고리즘/CodeForces

Educational Codeforces Round 43 (Rated for Div. 2)

A. Minimum Binary Number $\!$ 1과 0으로 구성된 문자열에 두 가지 연산을 할 수 있다. 인접한 두 문자의 자리를 바꾸거나, 인접한 두 1을 한 개의 1로 바꿀 수 있다. 이 문자열을 2진 숫자로 본다고 했을 때, 두 연산을 잘 사용하여 가장 작은 숫자로 바꾸어서 출력하는 문제이다. 인접한 두 문자의 자리를 바꾼단 말은 문자를 자유로이 움직일 수 있단 말과 같다. 따라서 모든 1을 왼쪽으로, 모든 0을 오른쪽으로 몰아넣으면 인접한 1은 한 개의 1로 바꿀 수 있으므로 1이 1개로 바뀔것이다. 더 이상 1을 없앨 수 없으므로 이때의 숫자가 가장 작은 숫자가 된다. 따라서 0의 개수만 세고난 뒤, 1 한 번 출력, 0의 개수만큼 0을 출력 해주면 된다.예외가 하나 있는데 0이 들어오는..

알고리즘/CodeForces

Codeforces Round #482 (Div. 2)

A. Pizza, Pizza, Pizza!!! $\!$ $n$이 주어지면 피자를 칼로 균등하게 $(n + 1)$조각 시키려한다. 칼은 피자 도우부분에서 시작해서 도우까지 또는, 중간에 멈출 수도 있고, 중간에서 시작해서 중간에서 멈출수도 있다. 단, 직선으로만 잘라야한다. 칼질횟수를 구하여라. 정말 간단하다. $(n + 1)$이 짝수면 그냥 중간을 쑥 쑥 지나가게 잘라버리면된다. 한번 중앙을 가로지르는 칼질을 반복하면 한번 칼질에 같은 크기의 피자가 2개씩 나오기 때문이다. $(n + 1)$이 홀수면 중앙을 가로지르는 칼질로는 피자를 균등하게 자를수가 없다. 그냥 중앙에서 시작해서 $(n + 1)$번 잘라야 모두 같은 크기로 자를 수 있다. 너무 간단해서 2줄코딩했는데 $n$이 0일때 예외가 생겨버린다...

피곤한투티
'2018/05/18 글 목록