포맷팅과 배열의 동적할당(4344)
소숫점 자리 표시 포맷팅은 항상 덮어두고 살면 잊어버린다.
{:.3f}% -> 소숫점 아래 3번째자리까지 표시하고 기 이하는 반올림한다.
import sys
a = int(input())
for i in range(a):
case = list(map(int, sys.stdin.readline().split()))
avg = sum(case[1:]) / case[0]
cnt=0
for i in range(1, len(case)):
if case[i] > avg:
cnt += 1
print("{:.3f}%".format(cnt/case[0]*100))
기본적으로 파이썬은 리스트를 동적으로 할당하는 것에 문제가 없다. 컴파일러가 알아서 받은 값마다의 메모리 할당을 해준다. CPP은 vector 혹은 string을 사용하지 않는 이상, 길이가 고정되지 않은 배열은 포인터로 선언해야 한다.
마법의 4줄:
int* arr;
int arrLen;
cin >> arrLen;
arr = new int[arrLen];
위와 같이 작성할 때 프로그램 내에서 배열의 길이를 받아 생성할 수 있다.
#include <iostream>
using namespace std;
int main() {
int caseNum;
cin >> caseNum;
for (int i=0;i<caseNum;i++){
int num;
int* arr;
double arrSum = 0;
double cnt = 0;
cin >> num;
arr = new int[num];
for (int i = 0; i < num; i++) {
cin >> arr[i];
arrSum += arr[i];
}
double avg = arrSum / num;
for (int i = 0; i < num; i++) {
if(arr[i] > avg)
cnt++;
}
cout << fixed;
cout.precision(3);
cout << cnt / num * 100 << "%" <<endl;
cout.unsetf(ios::fixed);
}
}
같은 결과물에 비해 줄 수의 차이가,,ㄷㄷ
C++의 부동소숫점 설정은 fixed, precision메서드를 통하여 구현할 수 있으며, 마찬가지로 소숫점 자리까지 반올림을 자동으로 해준다.
이후 usetf함수로 fixed를 해제하여준다.
한가지 더 주의할 점은 배열의 길이에 int형이 아닌 값을 넣으면 컴파일 에러가 날 수 있다. (VS에서는 괜찮았지만..)
Author And Source
이 문제에 관하여(포맷팅과 배열의 동적할당(4344)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leeyjwinter/파이썬-포맷팅4344저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)