사고쳤어요
[백준] 1076 저항 (C++) 본문
링크: https://www.acmicpc.net/problem/1076
1076번: 저항
전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다. 처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다. 저항의 값은 다음 표를 이용해서 구한
www.acmicpc.net
문제
전자 제품에는 저항이 들어간다. 저항은 색 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이 된다.
입력
첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 위의 표에 있는 색만 입력으로 주어진다.
출력
입력으로 주어진 저항의 저항값을 계산하여 첫째 줄에 출력한다.
풀이
black, brown, red, ... white 의 순서대로 벡터를 만든 후 입력받은 색들이 몇 번째에 있는지를 찾는다.
처음엔 (color1 * 10 + color2) * int(pow(10, color3)) 와 같이 구하려 하였으나 white, white, white와 같은 경우 int의 범위를 초과하여 string의 형식으로 출력하였다.
코드
#include <iostream>
#include <string>
#include <vector>
#include <algorithm> // find() 함수를 사용하기 위해 필요
using namespace std;
int main(){
vector<string> color = {"black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white"};
string color1, color2, color3;
cin >> color1 >> color2 >> color3;
auto it1 = find(color.begin(), color.end(), color1); // color 벡터에서 color1이 몇 번째에 있는지를 찾아준다.
auto it2 = find(color.begin(), color.end(), color2);
auto it3 = find(color.begin(), color.end(), color3);
int index1 = it1 - color.begin();
int index2 = it2 - color.begin();
int index3 = it3 - color.begin();
string answer = to_string(index1 * 10 + index2); // white, white, white와 같은 경우 int의 범위를 초과하기에 string으로 처리하였다.
if (answer != "0"){ // 답이 0인 경우에는 0으로 출력하기 위해 조건문을 작성하였다.
for (int i = 0; i < index3; i++){
answer += "0";
}
}
cout << answer;
}
'백준 > Bronze' 카테고리의 다른 글
[백준]팰린드롬수(c++) (0) | 2023.07.08 |
---|---|
[백준] 1075 나누기 (C++) (0) | 2023.01.11 |
[백준] 1009 분산처리 (C++) (0) | 2023.01.10 |