본문 바로가기

백준/C++

[Baekjoon/C++] 저항 1076번

Baekjoon Online Judge

문제로 이동

 

문제

전자 제품에는 저항이 들어간다. 저항은 색 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이 된다.

 

입력

첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 위의 표에 있는 색만 입력으로 주어진다.

 

출력

입력으로 주어진 저항의 저항값을 계산하여 첫째 줄에 출력한다.

 


예제 입력 예제 출력
yellow
violet
red
4700
orange
red
blue
32000000
white
white
white
99000000000

풀이

#include <iostream>
#include <cmath>
using namespace std;

// 저항의 색
string color[10] = { "black", "brown", "red", "orange", "yellow",
                    "green", "blue", "violet", "grey", "white" };

int main() {
    int sum = 0; // 저항의 값

    for (int i = 0; i < 3; i++) {
        // 입력
        string c;
        cin >> c;

        // 입력한 색이 color[]의 몇 번 인덱스에 해당하는 지 찾기
        int j = 0;
        for (j; j < 10; j++)
            if (c == color[j]) break;

        // 저항의 값 계산
        if (i <= 1)
            sum += (j * pow(10, 1 - i));
        else { // 출력
            cout << sum;

            if (sum > 0) {
                for (int k = 0; k < j; k++)
                    cout << "0";
            }
        }
    }

    return 0;
}

위의 문제는 ((첫번째 값 * 10) + 두번째 값) * 세번째 곱을 구하는 문제이다.

 

표에 입력된 색의 이름을 순서대로 color[]에 저장한 뒤 각 색들의 인덱스 번호를 이용했다. 첫번째와 두번째 색에 해당되는 값은 sum += (j * pow(10, 1 - i));을 이용해서 더했으며, 마지막 색은 해당 색의 인덱스 번호만큼 반복문으로 0을 출력했다.