일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- React.js
- html
- 魔法っていっていいかな
- 문자열숫자를 숫자로
- 오버플로우
- 平井堅
- ㅇ
- 십진수 16진수
- 백준 8958번
- 아스키코드로 숫자 넣기
- 자료형
- Official髭男dism
- 異端なスター
- 백준4344번
- body
- HEAD
- 히라이켄
- !doctype html
- 정수와 상수
- 마법이라고 불러도 좋을까?
- 아스키코드
- meta charset=
- 백준 11720
- 십진수 8진수
- Today
- Total
갓비니
2020/04/09 코딩 문제 연습 (6단계 / 백준 8958,4344번) C++ fixed, precision, setf(ios::showpoint) (자리수 고정, 정수->소수 0으로 채우기 표현!) 본문
2020/04/09 코딩 문제 연습 (6단계 / 백준 8958,4344번) C++ fixed, precision, setf(ios::showpoint) (자리수 고정, 정수->소수 0으로 채우기 표현!)
갓비니 2020. 4. 9. 03:38
4/10에는 5단계에서 풀지못한, 마지막 문제!
별 표시 문제를 풀고, 7단계로 넘어가보려고 한다.
<8958번>
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
|
#include <iostream>
#include <string>
using namespace std;
int main() {
int num;
cin >> num;
int *save_total = new int[num];
for (int i = 0; i < num; i++) {
string answer;
int count = 0;
int total = 0;
cin >> answer;
for (int j = 0; j < answer.size(); j++) {
else count = 0;
total += count;
}
save_total[i] = total;
}
for (int i = 0; i < num; i++) {
cout << save_total[i]<<"\n";
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
이것도 푸는데 몇시간은걸린 것 같다.. 너무 헤맸다 ㅠㅠ
힘들게 char로 문자열로 한개씩 받을필요가 없다.
string클래스를 활용해서 size()함수, at(원하는 인덱스)로 값을 뽑아낼 수 있기 때문이다.
에효 어렵다 ㅠ...
★string에서 유용한 함수★
1) str.size() -> string의 size 반환
2) str.at(원하는 인덱스) // (str[원하는 인덱스] 이것도 가능한데 at와 다르게 범위를 넘어가도 예외를 내보내지 않는다.)
3) str.back() // 스트링의 맨 마지막 문자를 반환해준다
아 바보였다.... 각 테스트 케이스마다 점수를 출력하라는건
한줄 입력 / 한줄 출력
한줄 입력/ 한줄 출력
이래도 된다는건데....아......굳이 save_total을 만들어서 값을 배열로 저장할 필요가 없었다는 것이다.
물론 배열로 저장해도 정답, 그렇지 않고 바로 출력해도 정답이다.
그렇지만 save_total을 지정해서 하게된다면 코드는 조금 더 길어질 수 있으나
실행시간은 4초나 더 빨랐다는 점!!! 이건 좋네 ㅎㅎㅎㅎㅎㅎ 괜히 뿌듯하다 ㅎㅎㅎ
<4344번>
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
36
37
38
39
40
41
42
43
44
45
46
|
#include <iostream>
using namespace std;
int main() {
int test_case;
cin >> test_case;
int stu_num;
double *save_rate = new double[test_case];
for (int i = 0; i < test_case; i++) {
cin >> stu_num;
int *grade=new int[stu_num];
double sum = 0;
double rate = 0;
double avg = 0;
for (int j = 0; j < stu_num; j++) {
cin >> grade[j];
sum += grade[j];
}
avg = sum / stu_num;
for (int j = 0; j < stu_num; j++) {
if ((grade[j]) > avg) {
rate++;
}
}
save_rate[i] = (rate / stu_num) * 100;
}
for (int i = 0; i < test_case; i++) {
cout<<fixed; //이것도 중요
cout.precision(3);
cout.setf(ios::showpoint); //와 중요!!!!
cout << (save_rate[i]) << "%"<<"\n";
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
소수점이 들어가는 문제에서는... 당연히 double, float를 써줘야 했던 것..
안그러면 int형으로 인식돼서 답이 0으로 나오고 만다.
★★★★여태 몰랐던 것.★★★★
cout.setf(ios::showpoint); 함수.
이것은 정수도 소수점으로 출력하게 해준다.
cout.precision(5); cout.setf(ios::showpoint); |
이 두 줄이었다면 40% --> 40.000%으로 출력되게 해준다.
그렇지만... 여기서 계속 답이 안나와서 생각해보니
만일 모든 이의 점수가 같아 평균값 이상인 사람이 없다면?
그럼 0%인데
0.0000% 라고 표현될 것이다.
그럼... 출력 조건에 어긋나잖아!! (소수점 아래 셋째자리까지 표현이 조건이었으므로)
이를 방지하기 위해 필요한 코드.
cout<<fixed; |
이것이다.
cout<<fixed를 쓴 후 cout.precision(1)을 사용하게 된다면 |
소수점 아래 한자리까지만 고정적으로 표현하게 되는것이다.
'Programming > 코딩 문제 풀이' 카테고리의 다른 글
2020/04/11 코딩 문제 연습 (7단계 / 백준 15596번, 함수 - C++ 구현이 어려움) (0) | 2020.04.11 |
---|---|
2020/04/10 코딩 문제 연습 (5단계 / 백준 10996번 - 왠지 어려운 문제) C++ (0) | 2020.04.10 |
2020/04/08 코딩문제 연습 (6단계 / 백준 3052,1546번 )C++ <절대오차 상대오차> (0) | 2020.04.09 |
2020/04/07 코딩 문제 연습(6단계 / 백준 2577번) C++ <문자와 아스키코드> (0) | 2020.04.07 |
2020/04/06 코딩 문제 연습(6단계 / 백준 10818,2562) C++ (0) | 2020.04.06 |