본문 바로가기

프로그래밍 언어/C, C++

[Hackerrank] 26. Print Pretty

26. Print Pretty

[ 난이도: Easy | 분야: STL ]

1. 과제

많은 줄 수를 가진 텍스트 파일 안 각각 3 개의 공백으로 구분된 double을 양식에 맞게 출력하라.

아래 section처럼 각 숫자들을 출력하라.

입력 형식

첫 번째 줄은 정수 T를 가지고 있고, 정수 T는 테스트 케이스의 수를 나타낸다.

각 T개의 하위 시퀀스 줄들은 3개의 공백으로 구분된 소수들로 이루어진 테스트 케이스를 가지고 있다. : A, B, C

 

제약 사항

T는 1보다 크거나 같고 1000보다 작거나 같다.

각 수들은 double 형식에 맞게 들어가 있다.

 

출력 형식

각 테스트 케이스 별로, 형식에 맞게 A, B 그리고 C를 3 줄로 출력하라.

각 A, B 그리고 C는 아래의 양식을 따른다:

1. A: 소수점을 버리고 이 수를 16진수(0x를 포함하여)로 출력하라.

2. B: 소수점 2자리 수까지만 출력하고 + 또는 -로 부호를 표기하라. 또한 왼쪽 정렬을 했을 때 15자리가 되도록 _를 추가하라.

3. C: 소수점 9자리까지만 출력하고 대문자를 이용하여 과학적 표기법으로 수를 표현하라.

 

입력 예시

1  
100.345 2006.008 2331.41592653498

 

출력 예시

0x64             
_______+2006.01  
2.331415927E+03

 

설명

출력의 첫 번째 줄은, (100)_10 → (64)_16이다.

출력의 두 번째와 세 번째 줄은 출력 형식에 맞추어 출력했다.

 

문제

#include <iostream>
#include <iomanip> 
using namespace std;

int main() {
	int T; cin >> T;
	cout << setiosflags(ios::uppercase);
	cout << setw(0xf) << internal;
	while(T--) {
		double A; cin >> A;
		double B; cin >> B;
		double C; cin >> C;

		/* Enter your code here */

	}
	return 0;

}
더보기

정답

#include <iostream>
#include <iomanip> 
using namespace std;

int main() {
	int T; cin >> T;
	cout << setiosflags(ios::uppercase);
	cout << setw(0xf) << internal;
	while(T--) {
		double A; cin >> A;
		double B; cin >> B;
		double C; cin >> C;

		/* Enter your code here */
        // A
        cout << left << hex << nouppercase << showbase << (long)A << endl;
        // B
        cout << dec << setw(15) << right << setfill('_') << showpos << fixed << setprecision(2) << B << endl;
        // C
        cout << scientific << noshowpos << setprecision(9) << uppercase << C << endl;
        
	}
	return 0;

}

여기서 주의점은 16진수로 바꿀 때 숫자는 실수가 아닌 정수여야 한다는 데 있다. 무작정 int로 형변환을 하게 되면 int보다 더 큰 수를 표현하는 테스트 케이스에 걸리게 된다. 위 코드처럼 형 변환 시 long으로 변환해야 한다.

cout의 부가 기능에 관한 것은 아래 블로그를 참조했다.

https://velog.io/@jh11240/C-cout-%EC%B6%9C%EB%A0%A5%EC%97%90-%EA%B4%80%ED%95%B4

 

[C++] cout 출력에 관해

개요 백준 1935번 문제를 풀다가 소수점 자리 고정이 기억이 안 나서 해멨다. 이왕 검색하는 김에 cout의 함수들을 정리해본다. cout 기본적인 출력은 cout을 사용하고, 비트 이동 연산자 setw, setfill, s

velog.io

 

 

 

 

 

 

©️Hackerrank. All Rights Reserved.

'프로그래밍 언어 > C, C++' 카테고리의 다른 글

[Hackerrank] 28. Inheritance Introduction  (0) 2024.02.23
[Hackerrank] 27. Deque-STL  (0) 2024.02.22
[Hackerrank] 25. Maps-STL  (0) 2024.02.20
[Hackerrank] 24. Sets-STL  (0) 2024.02.20
[Hackerrank] 23. Lower-Bound STL  (0) 2024.02.20