less than 1 minute read

고려사항

1. 시간초과

input()으로 입력을 받아서 그런가… 하고 input() 대신 sys.stdin.readline()을 사용해야겠다 생각함.

# 시간 초과

import sys
import math
from collections import defaultdict

d=defaultdict(int)

while True:
    try:
        a=input()
        if a:
            d[a]+=1
    except EOFError:
        break

total=sum(d.values())
keys = sorted(d.keys())

for k in keys:
    print(f"{k} {(d[k]/total)*100:.4f}")



2. 런타임 에러(ModuleNotFoundError)

외부 라이브러리를 사용하면 안되니까 뜨는 에러인가보다. 찾아보니 SortedDict가 딕셔너리 정렬에 좋은 것 같아서 써봤는데 안된다고 함.

Screenshot 2024-08-08 at 8 07 51 AM

# 런타임 에러(ModuleNotFoundError)

import sys
from sortedcontainers import SortedDict

d=SortedDict()

while True:
    a=sys.stdin.readline()
    if not a:
        break
    if a in d:
        d[a]+=1
    else:
        d[a]=1

total=sum(d.values())

for k in d:
    print(f"{k} {(d[k]/total)*100:.4f}")



3. 출력 형식이 잘못되었습니다

왜 잘못됐나 하고 예제 입력 텍스트를 긁어봤는데 줄마다 맨 끝에 공백이 있었음. .strip() 사용하여 입력에서 개행 문자를 제거해야 함.

Screenshot 2024-08-08 at 8 10 57 AM

# 출력 형식이 잘못되었습니다

import sys

d={}

while True:
    a=sys.stdin.readline()
    if not a:
        break
    if a in d:
        d[a]+=1
    else:
        d[a]=1

total=sum(d.values())
keys=sorted(d.keys())

for k in keys:
    print(f"{k} {(d[k]/total)*100:.4f}")



최종 코드

#S2_4358_Hardwood Species

import sys

d={}

while True:
    a=sys.stdin.readline().strip()
    if not a:
        break
    if a in d:
        d[a]+=1
    else:
        d[a]=1

total=sum(d.values())
keys=sorted(d.keys())

for k in keys:
    print(f"{k} {(d[k]/total)*100:.4f}")

Leave a comment