1.백준 - 평균은 넘겠지
문제점
풀었던 문제였으나 데이터가 추가되면서 기존 코드로는 정답이 불가능함
시도해 본 것들
반례를 기준으로 기존 출력 확인하기
20.312%출력 확인
format 대신 round 사용 시도
format과 같은 결과 출력
소수점을 하나 더 받고, if문으로 처리하기
기존 코드
over_score_ratio = format(
len([i for i in scores if i > average_score]) / len(scores) * 100, ".3f"
)
print(f"{over_score_ratio}%")
수정된 코드
# 사사오입 코드
over_score_ratio = list(
str(
format(
len([i for i in scores if i > average_score]) / len(scores) * 100, ".4f"
)
)
)
if int(over_score_ratio[-1]) >= 5:
over_score_ratio[-2] = str(int(over_score_ratio[-2]) + 1)
print(f"{''.join(over_score_ratio[:-1])}%")
제시된 반례는 해결했지만, 그리 마음에 드는 구조는 아닌 것 같다.
반올림 검색하기
오사오입 키워드 확인
https://ko.wikipedia.org/wiki/%EB%B0%98%EC%98%AC%EB%A6%BC
해결 방법
친숙한 사사오입으로 올림기준 만들기
# 사사오입 코드
a = int(input())
for _ in range(a):
scores = list(map(int, (input().split())))
students = scores.pop(0)
total_score = sum(scores)
average_score = total_score // students
over_score_ratio = list(
str(
format(
len([i for i in scores if i > average_score]) / len(scores) * 100, ".4f"
)
)
)
if int(over_score_ratio[-1]) >= 5:
over_score_ratio[-2] = str(int(over_score_ratio[-2]) + 1)
print(f"{''.join(over_score_ratio[:-1])}%")
python 내장 올림법 오사오입으로 올림하기
# 오사오입 코드
a = int(input())
for _ in range(a):
scores = list(map(int, (input().split())))
students = scores.pop(0)
total_score = sum(scores)
average_score = total_score // students
over_score_ratio = list(
str(
format(
len([i for i in scores if i > average_score]) / len(scores) * 100, ".4f"
)
)
)
# 이 부분에서 int(over_score_ratio[-2]) % 2 != 0이 python에서 round나 format을 하게되면 적용되는 로직이 된다.
if int(over_score_ratio[-2]) % 2 != 0 and int(over_score_ratio[-1]) >= 5:
over_score_ratio[-2] = str(int(over_score_ratio[-2]) + 1)
print(f"{''.join(over_score_ratio[:-1])}%")
알게 된 점
오사오입의 정확한 원리는 아직 이해하기 어렵지만, 일반적으로 사용하는 사사오입보다 정확한 값을 나타낸다고 한다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-06-29 python __name__사용 하기 (0) | 2023.06.29 |
---|---|
TIL 23-06-28 javascript decodeURIComponent (0) | 2023.06.28 |
TIL 23-06-21 JS for문, if문 사용하기 (0) | 2023.06.21 |
TIL 23-06-19 알고리즘 반례 찾기 (0) | 2023.06.19 |
TIL 23-06-17 백준 - 세로읽기 (0) | 2023.06.17 |