ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AtCoder Beginner Contest 241 후기
    AtCoder 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까지는 꼭 풀자고 했는데 못풀어서 마냥 기뻐할 수 없을듯. 우테코로 바쁘니 제때 업솔빙 해야겠다.

    'AtCoder' 카테고리의 다른 글

    AtCoder Beginner Contest 250 후기  (0) 2022.05.08
    AtCoder Beginner Contest 249 후기  (0) 2022.05.01
    Atcoder Beginner Contest 243 후기  (2) 2022.03.13
    AtCoder Beginner Contest 242 후기  (0) 2022.03.06
    AtCoder Beginner Contest 239 후기  (2) 2022.02.20

    댓글

Designed by Tistory.