본문 바로가기

개발/Algorithm

[Algorithm] C# /Python / Format 함수

 - 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 를 간단히 설명해보겠당!

C# : 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 함수