개발/Algorithm
[Algorithm] C# /Python / Format 함수
서파르타
2020. 6. 5. 17:38
- C#
https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 �
www.acmicpc.net
백준 알고리즘에서 C#으로 풀면 런타임 에러가 많이 난다...
질문을 검색해보니
Average메소드를 넣어서 풀면 런타임 에러가 발생되는 걸로 확인되었습니다. |
ㅋㅋㅋㅋㅋㅋㅋㅋ
Average 메소드를 써서 문제였던것 같다.
내가 푼 소스 코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
using System;
using System.Collections.Generic;
using System.Linq;
namespace test18
{
class Program
{
static void Main(string[] args)
{
int cnt = int.Parse(Console.ReadLine());
var goalLst = new List<List<int>>();
for (int i = 0; i < cnt; i++)
{
var goal = Console.ReadLine().ToString().Split(" ").Select(s => int.Parse(s)).ToList();
goal.RemoveAt(0);
goalLst.Add(goal);
}
for (int i = 0; i < cnt; i++)
{
double avg = 0;
for (int j = 0; j < goalLst[i].Count; j++)
{
if(goalLst[i][j] > goalLst[i].Average())
{
avg += 1;
}
}
Console.WriteLine(string.Format("{0:f3}", (avg / goalLst[i].Count) * 100) + "%");
}
}
}
}
|
cs |
|
위으 코드에서 소수점 3째자리까지만 출력하는 문제라 String.Format 를 간단히 설명해보겠당!
고정 소수점 표현
//소수점 둘째 자리 string str = string.Format("{0:f2}", 88.8888); //88.88
|
//소수점 첫째 자리 string str = string.Format("{0:f1}", 88.8888);
// 88.8
|
- Python
python으로 푼 문제는 정답이다.
이번에 풀면서 배웠던 내용을 정리해보려고 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# 대학생 새내기들의 90 % 는 자신이 반에서 평균은 넘는다고 생각한다.
# 당신은 그들에게 슬픈 진실을 알려줘야 한다.
# 입력 : 첫째 줄에는 테스트 케이스의 개수 C,
# 둘째 줄부터 각 테스트 케이스마다 학생의 수
# 이어서 N명의 점수가 주어진다.
# 출력 : 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여
# 소수점 셋째 자리까지 출력한다.
#test 케이스 개수
cnt = int(input())
#점수 받아오기
lst = list()
for i in range(cnt):
lst.append(list(map(int, input().split(" "))))
for j in range(0,cnt):
student = 0
del lst[j][0] #lst에 첫째자리 수 삭제
avg = sum(lst[j]) / len(lst[j]) #평균구하기
for v in lst[j]:
if(avg < v):
student += 1
result = ( student / len(lst[j])) * 100
print(format(result,".3f") + "%")
|
cs |
|
1. list for 문에서 for v in lst[j] 이렇게 선언하면 v로 list가 차례대로 들어온다. 따로 list[v]이렇게 선언하지 않는다.
2. list의 길이는 list.count가 아닌 len(list)로 불러와야 한다.
3. 소수점 셋째자리까지 표출하는게 문제였는데 이는 foramt을 쓰면 된다.
format 함수를 이용해 서식화된 문자(string)으로 반환 할 수 있다.
숫자를 표현할때 주로 사용한다.
format(요소(item), 포맷 지정자(format-specifier)) |
처음엔 round를 이용하였지만 round는 끝자리가 0이 아니면 출력하지 않아 출력형태를 서식화 할수 없다.
하지만 format 함수는 우리가 원하는 형태로 서식화 할수 있다.
코드
|
결과값 |
result = 13.0000
format(result, ".2f")
print(result)
|
13.00 |
result = 13.0000
format(result, "13.3.f")
print(result)
|
13.000 |
배운내용
C#, Python Format 함수