[Algorithm] 생태학 - Python

Sunwu Park·2024년 11월 3일
0

Algorithm

목록 보기
10/12

예제 입력

Red Alder
Ash
Aspen
Basswood
Ash
Beech
Yellow Birch
Ash
Cherry
Cottonwood
Ash
Cypress
Red Elm
Gum
Hackberry
White Oak
Hickory
Pecan
Hard Maple
White Oak
Soft Maple
Red Oak
Red Oak
White Oak
Poplan
Sassafras
Sycamore
Black Walnut
Willow

예제 출력

Ash 13.7931
Aspen 3.4483
Basswood 3.4483
Beech 3.4483
Black Walnut 3.4483
Cherry 3.4483
Cottonwood 3.4483
Cypress 3.4483
Gum 3.4483
Hackberry 3.4483
Hard Maple 3.4483
Hickory 3.4483
Pecan 3.4483
Poplan 3.4483
Red Alder 3.4483
Red Elm 3.4483
Red Oak 6.8966
Sassafras 3.4483
Soft Maple 3.4483
Sycamore 3.4483
White Oak 10.3448
Willow 3.4483
Yellow Birch 3.4483

해결과정

  • 먼저 보통 N이라는 숫자가 들어와서 그만큼 입력을 받는데 이번에는 그냥 언제 끝나는건지 몰라서 사실 좀 당황했었다. 그런데 보니 그냥 무한루프 돌면서 빈칸 나오면 그때 출력하게 하면 된다고 생각을 하였다. 일단 중복되는 count를 보니 map을 이용해서 풀면된다고 생각을 했다.
    그런데 dictionary를 만들고 사용하는데에 있어서 만약 key를 넣었는데 value가 없으면 무슨 값이 나올까 뭐 이렇게 생각을 했는데 그냥 if word in dic을 사용해서 풀면 되는것이었다. 먼저 dic에 있는지 판단하고 없다면 값을 넣어주기 방식

그리고 dictionary의 item을 어떻게 정렬하지 생각도 했는데 보니

sdic = dict(sorted(dic.items()))

이렇게 처리를 할 수 있는 것이었다. 원래는 lambada를 이용해서 하는건가 했는데 그냥 sorted만 쓰면 되는것이었다. 그리고 percent는 그냥 100분률로 하고 "%s %.4f 이렇게 해서 print하니 풀리는 문제였다

코드(출처: 짠짠's 코딩 연습장)

import sys

total = 0
dic = dict()
while 1:
    word = sys.stdin.readline().rstrip()
    if word == '':
        break
    total += 1   
    if word in dic:   # 전에 이미 나왔으면
        dic[word] += 1
    else:
        dic[word] = 1
sdic = dict(sorted(dic.items()))
for i in sdic:
    a = sdic[i]
    per = (a / total * 100)
    
    print("%s %.4f" %(i, per))

출처: 짠짠's 코딩 연습장

0개의 댓글