JLOG

[C++] cout 큰 int일 때 지수 표기법 방지 / 백준 1076 저항 풀이 본문

C++/개념 정리

[C++] cout 큰 int일 때 지수 표기법 방지 / 백준 1076 저항 풀이

정정선선 2021. 4. 22. 23:45

백준의 1076번 문제인 저항을 풀었다.

https://www.acmicpc.net/problem/1076

 

1076번: 저항

첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 색은 모두 위의 표에 쓰여 있는 색만 주어진다.

www.acmicpc.net

 

문제 자체의 난이도는 높지 않고, 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++에 익숙하지 않아 쉬운 문제만 풀지만 나도 백준 골드 달고 어서 어려운 문제에 도전하고 싶다!

Comments