CodingTest/Baekjoon

[baekjoon] 백준 4358번(파이썬): 생태학

JunJangE 2022. 1. 3. 02:04

문제

 

4358번: 생태학

프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어

www.acmicpc.net

알고리즘

- 반복문을 통해 나무의 이름을 입력받는다.

- 입력받은 나무가 없다면 반복문을 멈춘다.

- 나무의 종류에 이미 나무가 있다면 카운트한다.

- 나무의 종류에 나무가 없다면 나무를 추가한다.

- 나무의 개수를 카운트한다.

- 사전 순으로 정렬해주기 위해 나무의 종류를 리스트로 만든다.,

- 만든 리스트를 오름차순으로 정렬하여 사전 순으로 정렬한다.

- 사전 순으로 정렬한 나무의 이름순으로 백분율을 계산해서 출력한다.

코드

import sys

word = {} # 나무의 종류
n = 0 # 나무의 개수

# 반복문을 통해 나무를 입력받는다.
while True:
    tree = str(sys.stdin.readline().rstrip())

    # 입력받은 나무가 없다면 반복문을 멈춘다.
    if not tree:
        break

    # 나무의 종류에 이미 나무가 있다면 카운트
    if tree in word:
        word[tree] += 1

    # 나무의 종류에 나무가 없다면 나무를 추가
    else:
        word[tree] = 1

    n += 1 # 나무의 개수 카운트

# 사전순으로 정렬해주기 위해 나무의 종류를 리스트로 만든다.
trees = list(word.keys())
trees.sort() # 오름차순으로 정렬

# 사전순으로 정렬한 나무의 이름순으로 백분율을 계산해 출력
for j in trees:
    print("%s %.4f" % (j, word[j] / n * 100))

 

실패한 코드(16%..틀렸습니다.)

import sys

word = {} # 나무의 종류
n = 0 # 나무의 개수

# 반복문을 통해 나무를 입력받는다.
while True:
    tree = str(sys.stdin.readline().rstrip())

    # 입력받은 나무가 없다면 반복문을 멈춘다.
    if not tree:
        break

    # 나무의 종류에 이미 나무가 있다면 카운트
    if tree in word:
        word[tree] += 1

    # 나무의 종류에 나무가 없다면 나무를 추가
    else:
        word[tree] = 1

    n += 1 # 나무의 개수 카운트

# 사전순으로 정렬해주기 위해 나무의 종류를 리스트로 만든다.
trees = list(word.keys())
trees.sort() # 오름차순으로 정렬

# 사전순으로 정렬한 나무의 이름순으로 백분율을 계산해 출력
for j in trees:
    print(j, round(word[j] / n * 100, 4))

round 내장 함수를 확인해보면 알 수 있다.

 

내장 함수 — Python 3.10.1 문서

내장 함수 파이썬 인터프리터에는 항상 사용할 수 있는 많은 함수와 형이 내장되어 있습니다. 여기에서 알파벳 순으로 나열합니다. abs(x) 숫자의 절댓값을 돌려줍니다. 인자는 정수, 실수 또는 __

docs.python.org

round에 경우 round(0.5)와 round(-0.5)는 모두 0이고, round(1.5)는 2가 된다.

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com