| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- unity3dservival
- c#기본문법
- 백준 구현문제
- 백준 c++ 공부
- c#코딩기초트레이닝
- unity3d게임만들기
- 바킹독알고리즘
- c++ 백준
- 유니티게임만들기
- c#코테
- 백준
- 유니티공부
- C#문법
- c# c#프로그래머스
- 바킹독
- c#
- c#프로그래머스기초문법
- c#문제
- 오블완
- unity게임
- 티스토리챌린지
- 유니티
- unity게임만들기
- 백준코딩테스트
- 백준코테
- 유니티서바이벌게임만들기
- c#기초문법
- Unity
- c++ solved.ac
- 백준 C++
- Today
- Total
나 개발자 진짜 되냐?
백준 C++ 1546번 평균 ( fixed, setprecision ) 본문

반갑습니다.
일주일 만이군요.
근래 안 보였던 이유..(?)는
111% 슈퍼드리머 서류에 붙어서
과제전형 봤습니다.
어려웠습니다........
이 말밖엔...
오늘은...
일주일 만에 왔는데
스페셜 저지가 붙어버렸네요.
평균! 풀어보겠습니다.


이 녀석..
성적을 조작하다니..
항상 느끼지만 문제를 이해하는 게 참 어렵다.
사실은 그러면 안 되지만 계산기를 써봤다.
50/70*100 하니까

아무래도 상대오차가 10-2라는 이야기는
소수점 셋째 자리를 반올림하라는 거 같았다.
예제 입력 1을 보면
40 80 60 다 더해서 3으로 나누면
평균 60점이다.
근데
40/80*100
= 50
60/80*100
= 75
80/80*100
= 100
(50 + 100 + 75) / 3 = 75
이런 식인 거 같다.
근데 예시 2에서
소수 2번째 자리까지 출력하라는 뜻이 아니라는 글을 보았다..
10/30*100
= 33.33333..
33.33
20/30*100
= 66.666666...
66.67
30/30*100
= 100
33.33 + 66.67 + 100 / 3
= 66.666667
출력은 그냥 하는 게 맞는 거 같다.
내 계획
1. 숫자를 입력받아서
2. 가장 큰 수를 맨 앞에 두고
3. 그 친구들이랑 비교해서 계산해 주기
근데 문제가 뭐냐.
소수점... 어떻게 나누더라 금세 까먹었다..
분명 알았는데..... 긁적
일단 그냥 풀어봤다.
예제 1번 답이 75.0 이 나와야 하는데 75가 나왔다.
흠.. 혹시 값을 곱해줄 때 하나는 int로 줘서 그런가?
바꿔봤는데도 별 차이가 없다.
일단 내 식을 공개한.. 다!

인지 씨를 찾았다.
1. float보다 더 좋은 게 있습니다.
ㅇㅅㅇ? 네?
하고 예제 8번을 보니..
이 괴물숫자는 못 봤는데..ㄷㄷ
float는 7자리
double은 15자리까지 아서
더 정밀하다.
2. 출력형식 바꾸세요
내가 말하던 그 소수점 구하는 그 식인가 보다.
3. sort / reverse 잘했습니다.
하지만 max라면 더 좋았을 거 같아요!
max는 시간복잡도 O(N)
sort는 O(N log N)
이여서 max가 더 좋다고 한다.
헉.. 그러네..
사실 그 sort 내림차순이 기억 안 나서.. 긁적..
이렇게 했는데.
sort(v.begin(), v.end(), greater <float>());
내림차순을 하려면
가장 큰 수부터라고 표현하는 식
greater 해주면 된다.
그리고 소수점을 고정하기 위한 식..!
cout << fixed << setprecision(2)
2든 4든 8이든.. 15든..
이 식을 위에 써주고
답을 cout << sum / n; 해주면 된다.
근데 이게 진짜 낚시 권법(?)이라는 사실을 알았다.
열심히 위에다가 식을 썼는데..

..
이 식을 이렇게
보면 공통적으로 /m * 100이 들어가고
분배법칙에 의해
이렇게 안 하고 다 더 해준다음에 /m * 100 해줘도 된다는 것!!!!!
그래서 일일이 하나하나 for문으로 더해줄 필요가 없어졌다.
입력 때 그냥 가장 큰 수를 찾아서 m으로 넣어주고,
입력때 그냥 다 더해주고 /m * 100만 해주면 끝..!
그다음에 뭐 몇 글자까지 해서
fix >> setprecision 해주면 된다.

충격적인 사실
처음에 공개했던 내식을 제출했더니
.. 답이 맞았다..
좋긴 하다.
하지만 나는 틀린 줄 알고
인지 씨를 찾았던......
스페셜 저지!! 완!!
'C++을 시작해봐요! > 단계문제를 풀어보아요!' 카테고리의 다른 글
| 백준 C++ 2609번 최대공약수와 최소공배수 ( 유클리드 호제법 ) (0) | 2026.03.23 |
|---|---|
| 백준 C++ 2798번 블랙잭 ( 브루트포스 ) (0) | 2026.03.11 |
| 백준 C++ 2292번 벌집 ( 패턴 찾기, while문 ) (0) | 2026.03.06 |
| 백준 C++ 2231번 분해합 ( 브루트포스 ) (0) | 2026.03.05 |
| 백준 C++ 1978번 소수 찾기 ( 에라토스테네스의 체 ) (2) | 2026.02.25 |
