-- 예전 기록/BOJ

[ BOJ ] 1076 : 저항 ( BRONZE 2 ) / C, Python

rejo 2023. 11. 19. 13:33

문제

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

입력

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

출력

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

풀이 과정

첫 번째 색과 두 번째 색은 저항의 값이다. grey와 violet 이 나온다면 87, red와 orange 가 나온다면 23 이다.

세 번째 색은 곱해야 하는 값이다. 저항의 값에 색에 해당하는 곱 값을 곱하여 저항값을 계산한다.

 

입력받은 문자열이 색 단어와 동일한지 확인하는 과정이 필요하다. 

C

#include <stdio.h>
#include <string.h>

int colorMatch(char* str) {
    if (!strcmp(str, "black")) return 0;
    if (!strcmp(str, "brown")) return 1;
    if (!strcmp(str, "red")) return 2;
    if (!strcmp(str, "orange")) return 3;
    if (!strcmp(str, "yellow")) return 4;
    if (!strcmp(str, "green")) return 5;
    if (!strcmp(str, "blue")) return 6;
    if (!strcmp(str, "violet")) return 7;
    if (!strcmp(str, "grey")) return 8;
    if (!strcmp(str, "white")) return 9;
}

long long power(int n, int k) {
    if (k == 0) return 1;
    else return (long long)n * power(n, k - 1);
}

int main(void) {
    char first[10];
    char second[10];
    char third[10];
    scanf("%s", first);
    scanf("%s", second);
    scanf("%s", third);

    long long result = (colorMatch(first) * 10 + colorMatch(second)) * power(10, colorMatch(third));
    printf("%lld", result);
    return 0;
}

Python

import sys
input = sys.stdin.readline

first = input().rstrip()
second = input().rstrip()
third = input().rstrip()

color = {'black':0, 'brown':1, 'red':2, 'orange':3, 'yellow':4, 
         'green':5, 'blue':6, 'violet':7, 'grey':8, 'white':9}

print((color[first] * 10 + color[second]) * pow(10, color[third]))