문제

전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다. 처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다. 저항의 값은 다음 표를 이용해서 구한다.

예를 들어, 저항의 색이 yellow, violet, red였다면 저항의 값은 4,700이 된다.

 

 

조건 및 입출력

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

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

-  시간 제한: 2초 이내 / 메모리 제한: 128MB 이내

 

 

코드 (C99)
#include <stdio.h>
#include <string.h>
#include <math.h>

enum color { black, brown, red, orange, yellow, green, blue, violet, grey, white };

//프로토타입 선언부
int color_value(char* color);

main()
{
    int oma[3] = { 0 };
    long long result;

    for (int i = 0; i < 3; i++)
    {
        char color[10] = { 0 };
        scanf("%s", color);
        oma[i] = color_value(color);
    }

    result = (oma[0] * 10 + oma[1]) * (long long)pow(10, oma[2]);
    printf("%lld", result);

    return 0;	
}

int color_value(char* color) 
{
    if (strcmp(color, "black") == 0) return black;
    if (strcmp(color, "brown") == 0) return brown;
    if (strcmp(color, "red") == 0) return red;
    if (strcmp(color, "orange") == 0) return orange;
    if (strcmp(color, "yellow") == 0) return yellow;
    if (strcmp(color, "green") == 0) return green;
    if (strcmp(color, "blue") == 0) return blue;
    if (strcmp(color, "violet") == 0) return violet;
    if (strcmp(color, "grey") == 0) return grey;
    if (strcmp(color, "white") == 0) return white;
}​

 

 


여담

enum(열거형)을 이용해 문제를 풀이했다.

물론, 안쓰고도 풀이할 수 있겠지만 가독성을 위해 사용하였다.

 

이번 문제는 enum을 사용하여 문제를 풀었다는 것에 의의를 두려고 한다.

 

코드가 이상하거나, 이해되지 않는 부분이 있다면 댓글 남겨주세요!

+ 더 좋은 풀이 방법이 있다면 알려주세요 :)

+ Recent posts