시간 제한메모리 제한제출정답맞은 사람정답 비율
2 초128 MB80943126266039.425%

문제

전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다.

처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다.

저항의 값은 다음 표를 이용해서 구한다.

black01
brown110
red2100
orange31000
yellow410000
green5100000
blue61000000
violet710000000
grey8100000000
white91000000000

예를 들어, 저항에 색이 yellow, violet, red였다면 저항의 값은 4,700이 된다.

입력

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

출력

첫째 줄에 입력을 주어진 저항의 저항값을 출력한다.

예제 입력 1 

yellow
violet
red

예제 출력 1 

4700



<풀이과정> 


아래 처음 코드는 

자료형을 제대로 사용하지 않아 틀렸다..

아래 코드는 최대값을 입력했을 때 오류를 일으킨다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
    map<stringpair<int,int>> d1={
    {"black",{0,1}},{"brown",{1,10}},{ "red",{ 2,100 } },
    { "orange",{ 3,1000 } },{ "yellow",{ 4,10000 } },{ "green",{ 5,100000 } },
    { "blue",{ 6,1000000 } },{ "violet",{ 7,10000000 } },
    { "grey",{ 8,100000000 } },{ "white",{ 9,1000000000 } }};
    
    string a,b,c;
    cin >> a >> b >> c; // 숫자 텍스트 
    string s1,s2,ss;
    s1 = to_string(d1[a].first); 
    s2 = to_string(d1[b].first);
    ss = s1+s2;
    cout << stoi(ss)*d1[c].second;
    
  
    
    return 0;
}
cs




문제에서 나올 수 있는 최대 저항의 값은 

가장 큰 곱셉값인 10억 * 처음색 두개 두자리수 -> 백억단위 이상

문제의 조건을 보면 음수 값은 나올 수 없다.


--> unsigned long long 자료형 사용 



<c++ 자료형 범위와 크기 비교>

char 
signed char
1바이트, 8비트-128~127 
unsigned char1바이트, 8비트0~255 
short 
short int
2바이트, 16비트-32,768~32,767int 생략 가능
unsigned short 
unsigned short int
2바이트, 16비트0~65,535int 생략 가능
int
signed int
4바이트, 32비트-2,147,483,648~ 2,147,483,647 
unsigned 
unsigned int
4바이트, 32비트0~4,294,967,295int 생략 가능
long
long int
signed long
signed long int
4바이트, 32비트-2,147,483,648~ 2,147,483,647int 생략 가능
unsigned long 
unsigned long int
4바이트, 32비트0~4,294,967,295int 생략 가능
long long 
long long int 
signed long long 
signed long long int
8바이트, 64비트-9,223,372,036,854,775,808~
9,223,372,036,854,775,807
int 생략 가능
unsigned long long 
unsigned long long int
8바이트, 64비트0~18,446,744,073,709,551,615int 생략 가능



<최종코드>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
    map<stringpair<int,int>> d1={
    {"black",{0,1}},{"brown",{1,10}},{ "red",{ 2,100 } },
    { "orange",{ 3,1000 } },{ "yellow",{ 4,10000 } },{ "green",{ 5,100000 } },
    { "blue",{ 6,1000000 } },{ "violet",{ 7,10000000 } },
    { "grey",{ 8,100000000 } },{ "white",{ 9,1000000000 } }};
    
    string a,b,c;
    cin >> a >> b >> c; // 숫자 텍스트 
    string s1,s2,ss;
    s1 = to_string(d1[a].first); 
    s2 = to_string(d1[b].first);
    ss = s1+s2;
    
    unsigned long long number = stoi(ss); // 저항값
    cout << number*d1[c].second;
    
    return 0;
}
cs





정답!

















+ Recent posts