ABC151 C - Welcome to AtCoder에서 배운



음, 안돼.



하지만 wa.

WelcomToAtcoder_r0.py
N,M = map(int,input().split())

memo = [False]*N
wa = 0
for _ in range(M):
    p,S = input().split()
    p = int(p)-1
    if not memo[p] and S == "WA":#AC未 get 問題で wa なら インクリメント
        wa += 1
    elif S == "AC":#AC なら memo を ture.AC は後で true の数を数えればいい。
        memo[p] = True
ac = memo.count(True)
print("{} {}".format(ac,wa))

왜 wa인지 몰랐기 때문에,
테스트 케이스를 확인했다.

어리석었다.
문제문에는 AC를 처음 발행할 때까지의 WA의 수와 있다.
앞의 설명에서 하나도 AC가 없다면 WA의 수를 무한히 세는 것은 아닐까?

WelcomToAtcoder_r1.py
N,M = map(int,input().split())

memo = [False]*N
wa = [0]*N
for _ in range(M):
    p,S = input().split()
    p = int(p)-1
    if not memo[p] and S == "WA":
        wa[p] += 1
    elif S == "AC":
        memo[p] = True

WA = 0
AC = memo.count(True)
for i in range(N):
    if memo[i]:#正解するまでの WA をカウント
        WA += wa[i]
print("{} {}".format(AC,WA))


재 챌린지, 제대로 이해하고 있을까.

문제 문장을 읽고 머리에 떠오른 것은
다음 가장자리 케이스.

edge_case.py
2 5
1 WA
1 AC
2 WA
2 WA
2 WA

AC가 나올 때까지의 WA 카운트를 정상적으로 할 수 있는 패턴과,
AC가 나오지 않고 WA가 계속되는 패턴의 혼합.
대책으로서는, 각 N문자씩 WA를 메모하는 리스트와,
AC를 True/False로 기록하는 목록을 함께 관리해야합니다.

abc151c.py
N,M = map(int,input().split())
AC_memo = [False]*N                       #AC をメモ
WA_memo = [[] for _ in range(N)]          #WA をメモ

for _ in range(M):
    p,s = input().split()
    p = int(p)
    if not AC_memo[p-1] and s == "WA":    #未AC かつ WA なら WA としてメモ
        WA_memo[p-1].append("WA")
    elif not AC_memo[p-1] and s == "AC":  #未AC かつ AC なら AC としてメモ
        AC_memo[p-1] = True

AC = AC_memo.count(True)                  #ACは簡単。True を数えるだけ
WA = 0
for i in range(N):                        #i番目の問題で WA 数をカウントしたい
    if AC_memo[i] and len(WA_memo[i]) > 0:#条件として AC_memo[i] が True である必要がある
        WA += len(WA_memo[i])

print(AC,WA)

좋았다. 쓰기에는 똑똑함이 부족하지만
포인트를 뚫을 수 있고, 안전 AC.

좋은 웹페이지 즐겨찾기