728x90
https://www.acmicpc.net/problem/1076
1076번: 저항
첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 위의 표에 있는 색만 입력으로 주어진다.
www.acmicpc.net
1. 문제
전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다. 처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다. 저항의 값은 다음 표를 이용해서 구한다.
색 값 곱
black | 0 | 1 |
brown | 1 | 10 |
red | 2 | 100 |
orange | 3 | 1,000 |
yellow | 4 | 10,000 |
green | 5 | 100,000 |
blue | 6 | 1,000,000 |
violet | 7 | 10,000,000 |
grey | 8 | 100,000,000 |
white | 9 | 1,000,000,000 |
예를 들어, 저항의 색이 yellow, violet, red였다면 저항의 값은 4,700이 된다.
2. PS
- map을 이용하여 색과 숫자를 string 형태로 저장함.
- int를 사용하여 풀어도 될 것 같으나... 출력 값이 string으로 하는 것이 편하다고 생각해서 계속 풀어봄.
- 나중에 다른 방법으로 풀어봐야할 것 같음.
- (black,black,white) , (black, black, black) 의 경우 처럼 예외들을 처리하는 것을 빼먹지 말자.
#include <iostream>
#include <map>
#include <algorithm>
#include <deque>
#include <string>
using namespace std;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
map<string,string> m;
m["black"] = "0";
m["brown"] = "1";
m["red"] = "2";
m["orange"] = "3";
m["yellow"] = "4";
m["green"] = "5";
m["blue"] = "6";
m["violet"] = "7";
m["grey"] = "8";
m["white"] = "9";
deque<string> ans;
string color;
for(int i = 0 ; i < 3; i++) {
cin >> color;
if(ans.empty() && color == "black") continue;
if(i!=2) ans.push_back(m[color]);
else {
if(!ans.empty()) {
int n = stoi(m[color]);
for(int i = 0 ; i < n; i++) {
ans.push_back("0");
}
}
else ans.push_back("0");
}
}
if(ans.empty()) ans.push_back("0");
for(auto it = ans.begin(); it != ans.end(); ++it) cout << *it;
}
'BOJ > C++' 카테고리의 다른 글
BOJ [C++]) 10799번 쇠막대기 (0) | 2021.12.23 |
---|---|
BOJ [C++]) 11652번 카드 (0) | 2021.12.23 |
BOJ [C++]) 10816번 숫자 카드 2 (0) | 2021.12.21 |
BOJ [C++]) 10815번 숫자 카드 (0) | 2021.12.21 |
BOJ [C++]) 10867번 중복 빼고 정렬하기 (0) | 2021.12.21 |