저항 성공
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 128 MB | 8094 | 3126 | 2660 | 39.425% |
문제
전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다.
처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다.
저항의 값은 다음 표를 이용해서 구한다.
색 | 값 | 곱 |
---|---|---|
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 |
예를 들어, 저항에 색이 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<string, pair<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 char | 1바이트, 8비트 | 0~255 | |
short short int | 2바이트, 16비트 | -32,768~32,767 | int 생략 가능 |
unsigned short unsigned short int | 2바이트, 16비트 | 0~65,535 | int 생략 가능 |
int signed int | 4바이트, 32비트 | -2,147,483,648~ 2,147,483,647 | |
unsigned unsigned int | 4바이트, 32비트 | 0~4,294,967,295 | int 생략 가능 |
long long int signed long signed long int | 4바이트, 32비트 | -2,147,483,648~ 2,147,483,647 | int 생략 가능 |
unsigned long unsigned long int | 4바이트, 32비트 | 0~4,294,967,295 | int 생략 가능 |
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,615 | int 생략 가능 |
<최종코드>
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<string, pair<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 |
정답!
'개발자의 기본기 > 알고리즘 문제' 카테고리의 다른 글
<백준 알고리즘> 1158번 조세퍼스 문제 (0) | 2020.09.26 |
---|---|
<백준 알고리즘> 11718번 그대로 출력하기 (0) | 2020.09.26 |
<백준 알고리즘> 10828번 스택 (0) | 2020.09.26 |
<백준 알고리즘> 9012번 괄호 (0) | 2020.09.26 |
<백준 알고리즘> 2346번 풍선 터뜨리기 (0) | 2020.09.26 |