출처 : 백준 #1076
시간 제한 | 메모리 제한 |
---|---|
2초(추가 시간 없음) | 128MB |
전자 제품에는 저항이 들어간다. 저항은 색 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
int[]
를 통해 묶어 저장하였다.10^인덱스 값
이기 때문에 indexOf
로 풀었다. 이처럼 너무 풀이가 보인다고 달려들어서 조금 더 효율적으로 풀 생각을 못했다. registerValue
에서 처음 두 값은 문자열로 합쳐서 더해준다.Long
타입으로 바꾼다.("white"의 경우 곱의 값이 10억에 달하기 때문에 int(약 21억)로는 부족할 것이란 판단)get()
으로 불러와 곱해준 후 반환한다.// 백준 1076번 저항
package algorithm;
import java.util.*;
public class Baekjoon1076 {
public static void main(String[] args) {
HashMap<String, int[]> registerValue = new HashMap<String, int[]>() {{
put("black", new int[]{0, 1});
put("brown", new int[]{1, 10});
put("red", new int[]{2, 100});
put("orange", new int[]{3, 1000});
put("yellow", new int[]{4, 10000});
put("green", new int[]{5, 100000});
put("blue", new int[]{6, 1000000});
put("violet", new int[]{7, 10000000});
put("grey", new int[]{8, 100000000});
put("white", new int[]{9, 1000000000});
}};
Scanner sc = new Scanner(System.in);
String first, second, third;
first = sc.nextLine();
second = sc.nextLine();
third = sc.nextLine();
String tempString = "";
tempString += registerValue.get(first)[0];
tempString += registerValue.get(second)[0];
long answer = Long.parseLong(tempString) * registerValue.get(third)[1];
System.out.println(answer);
}
}
// 백준 1076번 개선된 풀이
package algorithm;
import java.util.*;
public class Baekjoon1076U {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String first = sc.nextLine();
String second = sc.nextLine();
String third = sc.nextLine();
ArrayList<String> list = new ArrayList<>();
list.add("black"); // index = 0
list.add("brown"); // index = 1
list.add("red"); // index = 2
list.add("orange"); // index = 3
list.add("yellow"); // index = 4
list.add("green"); // index = 5
list.add("blue"); // index = 6
list.add("violet"); // index = 7
list.add("grey"); // index = 8
list.add("white"); // index = 9
long answer = 0L;
answer += list.indexOf(first)*10;
answer += list.indexOf(second);
answer *= Math.pow(10, list.indexOf(third));
System.out.println(answer);
}
}