JLOG
[C++] cout 큰 int일 때 지수 표기법 방지 / 백준 1076 저항 풀이 본문
백준의 1076번 문제인 저항을 풀었다.
https://www.acmicpc.net/problem/1076
문제 자체의 난이도는 높지 않고, hash를 이용하여 풀었다.
예제에 대해서는 답이 나오는 것을 확인할 수 있었는데, 제출해보니 문제가 틀렸다.
그 이유는 white, white, white의 결과인 9.9e+10처럼 큰 수일 때 자동으로 지수 표기법으로 표현 된다는 것이 문제였다.
그래서 해결책을 찾아보니
1) printf를 사용
printf("%lld",(total[0]*10+total[1])*(long long)pow(10,total[2]));
출처 : www.acmicpc.net/board/view/57607
2) cout fixed 사용
std::cout<<fixed;
cout.precision(0);
참고로 fixed의 의미는 float 자리수를 고정시켜 사용하는 것이고, cout.precision("표시하고 싶은 소수점 자리수");를 입력해 사용하면 된다.
나는 int를 출력해야함으로 소수점 자리수를 0을 넣어주었다.
참고 블로그 : pmoncode.tistory.com/20
아래는 해답 코드이다.
해시를 사용해서 풀이해보았다.
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
/*저항 https://www.acmicpc.net/problem/1076
*/
int main(void){
map<string, int> charts;
charts["black"] = 0;
charts["brown"] = 1;
charts["red"] = 2;
charts["orange"] = 3;
charts["yellow"] = 4;
charts["green"] = 5;
charts["blue"] = 6;
charts["violet"] = 7;
charts["grey"] = 8;
charts["white"] = 9;
string clr1, clr2, clr3;
std::cin>>clr1>>clr2>>clr3;
std::cout<<fixed;
cout.precision(0);
std::cout<<(charts[clr1] * 10 + charts[clr2]) * pow(10, charts[clr3]);
}
처음 hash를 사용해서 위와 같이 모두 하나하나 입력해줬는데, 다른 사람 풀이를 보니
map<string, int> charts={{"black", 0}, {"brown", 1}, ,,, {"white", 9}}
와 같은 식으로 해쉬를 입력하는 것도 확인할 수 있었다.
참고 블로그 : kih0902.tistory.com/20
지금은 c++에 익숙하지 않아 쉬운 문제만 풀지만 나도 백준 골드 달고 어서 어려운 문제에 도전하고 싶다!
'C++ > 개념 정리' 카테고리의 다른 글
[C++]포인터의 개념과 포인터 변수 선언하기 및 역참조 (0) | 2021.04.11 |
---|
Comments