AtCoder Beginner Contest 283

김현준·2022년 12월 24일
0

Atcoder

목록 보기
3/3

2022-12-24 21:00 ~ 22:40 엣코더 대회에 참여했습니다.

이번에는 처음으로 D 번까지 풀었습니다. A,B,C,D 까지 문제만 잘 읽으면 이번대회는 쉬웠던거 같습니다.
E 번도 시도해봤지만 정말 어려웠던거 같습니다. 대회끝내고 에디토리얼을 봤는데 3차원 dpdp 로 푸는거 보고 식겁해서 이번에는 A,B,C,D 번 코드 리뷰를 하겠습니다.

📌 A - Power

본문 링크

간단합니다. AA , BB 가 주어졌을때 AbA^b 를 구하는 문제입니다.

📕 A - Code


a,b=map(int,input().split())
print(a**b)

📌 B - First Query Problem

본문 링크

간단합니다. 리스트가 주어졌을때 QQ 개의 쿼리를 수행하면됩니다.

예제 입력을 보시면 바로 이해가 될껍니다.

먼저 NN 을 입력받습니다. 이때 NN 은 리스트의 길이입니다.
이후 리스트를 입력받고 QQ 를 입력받습니다. 이는 쿼리의 개수입니다.
만약 쿼리의 첫번째 값이 22 일때는 두번째 값이 22 일때 리스트의 인덱스 22 의 값 , L[2]L[2] 를 출력합니다. 이때 쿼리에서 인덱스는 1부터 시작하기 때문에 L[Q1]L[Q-1] 을 출력해야합니다.

두번째로 쿼리의 첫번째 값이 11 일때는 두 정수가 나옵니다.
이는 두번째 값의 인덱스를 세번째 값으로 바꾸라는 소리입니다.
예를 들어 1 3 0 일때 L[31]L[3-1] 의 값을 0 으로 바꾸라는 뜻입니다.

📗 B - Code


import sys
input=sys.stdin.readline

N=int(input())
L=list(map(int,input().split()))
Q=int(input())

for i in range(Q):
    P=list(map(int,input().split()))

    if P[0]==2:
        print(L[P[1]-1])
    else:
        L[P[1]-1]=P[2]

📌 C - Cash Register

본문 링크

이 문제도 지문을 꼼꼼하게 읽으면 쉽습니다.

현재 사용 가능한 문자열은 다음과 같습니다.

  • 00,0,1,2,3,4,5,6,7,8,900,0,1,2,3,4,5,6,7,8,9

만약 입력이 4000440004 일때 44 , 0000 , 00 , 44 를 붙이면 4번만에 만들 수 있습니다.

최소값을 구하는 문제이기 때문에 최대한 0000 을 많이 써야하므로
가능한 0000 의 값을 모두 구하고 나머지는 문자열의 길이를 더해줘서 해를 구했습니다.

📘 C - Code


S=input()

sum=0

sum+=S.count("00")
S=S.replace("00","")

sum+=len(S)
print(sum)

📌 D - Scope

본문 링크

어려워보이지만 문제만 잘 읽으면 간단하게 풀리는 문제입니다.

먼저 문자열 SS 가 주어집니다. 그리고 총 3개의 경우가 주어집니다.

  • ( - 이때 그냥 넘깁니다.
  • ) - 박스에 있는 모든 문자를 지워버립니다.
  • 문자 (A~Z) - 이때 문자를 박스에 넣습니다. 하지만 박스에 동일한 문자가 있으면 NoNo 를 출력합니다.

따라서 이 문제는 O(N)O(N) 의 시간복잡도로 해결가능합니다.

그냥 구현해주면되는데 박스에 문자가 있는지 체크를 하기위해서 setset 을 사용했습니다.
setset 을 사용하면 if a in b 의 시작복잡도가 최소 O(1)O(1) 의 시간복잡도를 갖기 떄문입니다.

📕 C - Code


from collections import deque
S=deque(list(input()))

Box=set()

while S:

    check=S.popleft()

    if check=="(":
        pass
    elif check==")":
        Box=set()
    else:
        if check in Box:
            print("No")
            exit(0)
        else:
            Box.add(check)

print("Yes")

✅ 후기

이번에도 깔끔하게 A~D 까지 AC 를 받았습니다. 기분이 좋네요
E번을 못푼게 조금많이 아쉬웠지만 그만큼 어려운 문제인거같습니다.

최대한 빨리 브라운을 찍어보도록 노력하겠습니다.

profile
울산대학교 IT융합학부 22학번

0개의 댓글