-
Codeforces Round #534 (Div. 2) A ~ C알고리즘/Codeforces 2021. 1. 12. 21:27반응형
풀은 문제: A, B, C
못 풀은 문제: D, E
난이도
A - 800
B - 1200
C - 1400
D - 2000
E - 2700
대화형 문제가 하나 있던데 이 부분은 나중에 공부를 해야할 것 같다.
그리고 이번엔 풀은 문제들을 전부 최소 한 번씩 틀리고 제출해서 아쉬웠다.
A. Splitting into digits
n이 어떤 수 k로 나누어 떨어지고, 1<= d_k <= 9 일 때 출력하는 문제이다.
이거는 그냥 브루트포스로 n을 i로 나누면 나누어떨어지는지 확인하고, d_i가 1이상 9이하의 수로 출력할 수 있는지 확인하면 된다.
아니면 그냥 n으로 나누어서 1을 n번 출력하면 된다.
def main(): n = int(input()) for i in range(1,n+1): if n % i == 0 and len(str(n//i)) == 1: print(i) print(*[n//i]*i) break
B. Game with string
두 플레이어가 문자열 가지고 게임을 하는데, 연속되는 두 문자가 있을 때마다 계속 삭제하여 상대 플레이어가 연속되는 두 문자를 더 이상 찾지 못하면 승리하는 게임이다.
이 문제는 변수 i와 while문을 이용해서 연속되는 두 문자가 있으면 삭제하고, 삭제한 상태에서 또 연속되는 두 문자가 있는지 확인하는 것을 반복해주면 된다.
def main(): s = input() ans = 0 i = 1 while 1: if i >= len(s):break if s[i] == s[i-1]: ans += 1 s = s[:i-1] +s[i+1:] if i>1: i-=1 else: i+=1 if ans % 2 == 1:print('Yes') else:print('No')
if i > 1: i -= 1이 있는 이유는 예제에 있는 입력인 abba를 입력받으면 i=2에서 bb가 삭제되는데, 그럼 남은 문자열은 aa로 원래 i값에서 1을 뺀 i=1에서 탐색해야한다. 이걸 일반화시키면 다른 입력에서도 연속되는 두 문자가 나타나면 문자를 빼주고 i-=1을 해야하므로 if문을 추가하였다.
C. Grid game
이런 4 x 4 격자에 가로로 2칸을 차지하는 1x2 타일, 세로로 2칸을 차지하는 2x1 타일을 붙이는데, 세로로 한 줄이 나오거나 가로로 한줄이 나오면 해당 줄을 삭제할 수 있는 기능이 추가된 문제이다.
이걸 잘 생각해보면
빨간줄은 2x1 타일, 파란줄은 1x2 타일로 저 구역에만 할당시켜서 세로타일은 2개, 가로타일은 4개만 있으면 구역을 초기화 시킬 수 있다.
아니면 이렇게 세로타일은 4개, 가로타일은 2개만 있으면 해당 구역을 계속 초기화 시키면서 새로 채워 넣을 수 있다.
이 아이디어만 생각해냈다면 이제 구현만 하면 된다.
코드는 첫번째 사진을 가지고 만들었다.
def main(): def clear(x): if D[0][x]+D[1][x]+D[2][x]+D[3][x] == 4: for i in range(4):D[i][x] = 0 s = input() D = [[0]*4 for _ in range(4)] for i in range(len(s)): if s[i] == '0': for j,k in [[0,0],[2,0]]: if D[j][k] + D[j+1][k] == 0: D[j][k],D[j+1][k] = 1,1 print(j+1,k+1) clear(0) break else: for j,k in [[0,2],[1,2],[2,2],[3,2]]: if D[j][k] + D[j][k+1] == 0: D[j][k],D[j][k+1]=1,1 print(j+1,k+1) clear(2);clear(3) break
반응형'알고리즘 > Codeforces' 카테고리의 다른 글
Educational Codeforces Round 59 (Rated for Div. 2) A ~ D (0) 2021.01.14 Codeforces Round #535 (Div. 3) A ~ E1 (0) 2021.01.13 Codeforces Round #533 (Div. 2) A ~ D (0) 2021.01.11 Codeforces Round #695 (Div. 2) A ~ C (0) 2021.01.09 Codeforces Round #532 (Div. 2) A ~ C (0) 2021.01.08