[백준] 1076 저항 JAVA

·2024년 2월 25일

1일1백준 -Java-

목록 보기
4/60

문제

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

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

입력

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

출력

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

예제 입력

orange
red
blue

예제 출력

32000000

내가 했던 풀이 방법

색깔의 값과 곱을 저장해둘 방법

  1. 구조체를 만들어서 색, 곱, 값을 넣어놓자 -> JAVA는 구조체가 없다... 클래스를 이용하기엔 더 좋은 방법이 있을 것 같은데?
  2. 어차피 0,1,2,3,4...가 배열 index와 같고 곱에 0개수도 값과 같으니 그냥 String 배열에 색깔을 넣어놓고 활용하자

저항의 값을 계산하는 방법

  1. 첫 번째와 두 번째에 입력받은 색깔의 값을 String으로 변환해서 합쳐주고, int로 변환해서 세 번째에 입력받은 색깔의 곱으로 곱해주자
  2. 첫 번째에 입력받은 색깔의 값을 ×10 해준 뒤 두 번째에 입력받은 색깔의 값과 더해준 뒤, 세 번째의 입력받은 색깔의 곱으로 곱해주자
  3. 첫 번째와 두 번째에 입력받은 색깔의 값을 String으로 변환해서 합쳐주고, 세 번째에 입력받은 색깔의 값만큼 "0"을 뒤에 더해주자

2번과 3번 중에 3번을 택해서 풀이했는데, 2번으로 할 경우 white white white의 경우 99,000,000,000이라 int 범위를 넘어가 3번으로 해결했다. int 말고 다른 자료형을 쓰면 되긴 하지만, 이건 취향인지라..

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
        public static void main(String[] args) throws IOException {

        String[] color = {"black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white"};
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] number = new int[3];
        for(int i=0; i<3; i++) {
            String input = br.readLine();
            for(int j=0; j<color.length; j++) {
                if(color[j].equals(input)) {
                    number[i]=j;
                }
            }
        }

        String answer = "";
        if(number[0]!=0) {
            answer = Integer.toString(number[0]) + Integer.toString(number[1]);
        } else {
            answer = Integer.toString(number[1]);
        }
        
        if(!answer.equals("0")) {
            for(int i=0; i<number[2]; i++) {
                answer += "0";
            }
        }
        System.out.print(answer);
    }   
}

이 방법을 사용할 경우, 놓치게 되는 게 있는데 곱했을 때 0이면 당연히 출력값도 0이 되어야 한다. 예를 들어, black black grey가 입력될 경우에 0000000000이지만, 출력은 0이어야 한다. black brown brown 같은 경우엔 010이지만, 출력은 10이어야 한다. 그래서 첫 번째 값이 0일 때, 첫 번째 값을 무시해줬고, 두 번째에도 0일 경우 곱하는 부분을 무시하도록 해주었다.

회고

이번 문제는 단순했다. 예시에 0과 관련된 예시가 있었다면 더 금방 풀었겠지만, 이걸 의도하고 낸 문제같다. (아님 말고) 크게 회고할 문제는 아닌 것 같..다. EASY!

profile
Frontend🍓

0개의 댓글