AtCoder

AtCoder Beginner Contest 241 후기

PeiSea 2022. 2. 27. 18:52

A. Digit Machine

 인덱스 배열이 주어지고, 초기 인덱스가 0일 때 문제의 규칙에 따라 2번 이동 시 마지막 인덱스를 묻는 문제. 단순 구현

import sys
 
arr = list(map(int, sys.stdin.readline().split()))
now = 0
for i in range(2):
    now = arr[now]
print(arr[now])

B. Pasta

 먹을 수 있는 파스타의 면 길이가 주어지고, 먹고 싶은 파스타 면 길이가 주어질 때 모든 먹고 싶은 파스타를 먹을 수 있는지 체크하는 문제. dictionary를 적절히 쓰면 되는 쉬운 문제

import sys
 
n , m = map(int, sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
b = list(map(int, sys.stdin.readline().split()))
res = dict().fromkeys(a, 0)
for i in a:
    res[i] += 1
for i in b:
    if i not in res:
        print('No')
        sys.exit(0)
    if res[i] <= 0:
        print('No')
        sys.exit(0)
    res[i] -= 1
print('Yes')

C. Connect 6

 초반에 문제 이해를 제대로 하지 못해서 번역기를 썼지만 그마저도 이해를 못해서 시간을 날린 문제다. 어이없게도 그냥 2개의 격자를 바꿔서 육목을 만들 수 있는지 없는지 확인하는 브루트 포스이다.

import sys

# check : 현재 격자가 (x,y)에 위치해있고 각각이 a, b만큼 움직일 때 육목을 만들수 있는지 없는지를 리턴하는 함수
def check(x, y, a, b):
    white, black = 0, 0
    cnt = 1
    # 이동해도 범위에 있고 아직 6개를 조사하지 않을 때만 반복
    while 0 <= x + a < n and 0 <= y + b < n and cnt < 6:
        # 색깔별 판독
        if arr[x][y] == '.':
            white += 1
        else:
            black += 1
        # 갯수 증가 및 위치 이동
        cnt += 1
        x += a
        y += b
        
    # 마지막 격자 확인
    if 0 <= x < n and 0 <= y < n:
        if arr[x][y] == '.':
            white += 1
        else:
            black += 1
    
    # 만약 6개를 구성하지 못하는 경우는 육목이 안됨
    if cnt < 6:
        return False
    # 바꿀 수 있는 격자가 2개 이하이기 때문에 2개 초과면 육목을 만들 수 없음
    if white > 2:
        return False
    return True
 

# 입력부
n = int(sys.stdin.readline())
arr = [list(sys.stdin.readline().rstrip()) for _ in range(n)]
dx = [1, 0, 1, 1]
dy = [0, 1, -1, 1]

# 모든 격자 돌면서 확인
for i in range(n):
    for j in range(n):
        for k in range(4):
            if check(i, j, dx[k], dy[k]):
                print('Yes')
                sys.exit(0)
print('No')

 

 총평 : D번도 못풀어보고 망한 대회.... 파이썬보다는 c++로 푸는게 나은 문제인데 고집부리다가 시간 말아먹은게 아쉬웠음. C만 풀어서 레이팅 떡락을 예상했으나 생각보다 다른 사람들도 많이 D를 못풀어서 의문의 레이팅 상승. 그래도 내적 기준으로 D까지는 꼭 풀자고 했는데 못풀어서 마냥 기뻐할 수 없을듯. 우테코로 바쁘니 제때 업솔빙 해야겠다.