본문 바로가기

BOJ/C++

BOJ [C++]) 1076번 저항

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