BaekJoon1076 - 저항
[Java] BaekJoon1076 - 저항
-
Scanner와 배열을 이용하여 처음 풀었을 당시의 코드:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] input = new String[3]; int[] inputNum = new int[3]; String[] color = {"black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white"}; int[] value = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000}; for (int i = 0; i < input.length; i++){ input[i] = scanner.nextLine(); for(int j =0; j < color.length; j++) { if (input[i].equalsIgnoreCase(color[j])){ inputNum[i] = j; } } } long tmp = (inputNum[0]*10)+ inputNum[1]; long answer = tmp * value[inputNum[2]]; System.out.println(answer); scanner.close(); } }
-
color의 값과 color에 부합하는 곱의 값을 배열 안에 넣어 관리를 하도록 제작하였다. 3개의 값을 입력 받아야 하므로, 첫 반복문은 하나의 color 이름을 입력받아, 그 이름에 맞는 값이 color 배열 내의 몇 번 째인지 확인하여, 이 index값을 int형식의 배열에 집어넣었다.
if (input[i].equalsIgnoreCase(color[j])){ inputNum[i] = j; }
-
첫 번째 색상은 color의 값을 10의 자리로, 두 번째 색상은 color의 값을 1의 자리로 얻어 서로 더하는 것을 위의 표에서 확인하였기 때문에, 값이 커질 것을 대비하여 long 타입의 변수를 선언하여 집어넣었다.
long tmp = (inputNum[0]*10)+ inputNum[1];
-
이후, 세 번째 색상의 경우 color의 곱을 첫번째와 두번째 색상의 합에 곱해야 하기 때문에, color의 곱을 집어넣은 배열을 호출해, 인덱스부분에는 Index의 값을 넣어둔 int 배열을 집어넣어 해결하였다.
long answer = tmp * value[inputNum[2]];
- 결과:
별로 효율적이지도 않고, 코드 자체가 깔끔하지 않은 것 같아 아래와 같이 수정하였다.
-
-
BufferedReader와 enum을 조합하여 변경 한 코드:
import java.io.*; enum Colors { black(0, 1), brown(1, 10), red(2, 100), orange(3, 1000), yellow(4, 10000), green(5, 100000), blue(6, 1000000), violet(7, 10000000), grey(8, 100000000), white(9, 1000000000); int value; int multiply; Colors(int value, int multiply) { this.value = value; this.multiply = multiply; } public int getValue() { return value; } public int getMultiply() { return multiply; } } public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String a = br.readLine(); String b = br.readLine(); String c = br.readLine(); System.out.println(result(a,b,c)); br.close(); } public static long result(String input1, String input2, String input3) { Colors colors = Colors.valueOf(Colors.class, input1); long answer = colors.getValue() * 10; answer += Colors.valueOf(Colors.class, input2).getValue(); answer *= Colors.valueOf(Colors.class, input3).getMultiply(); return answer; } }
-
enum의 컬러에 value와 multiply의 값을 입력하여, color의 이름만 안다면 valued의 값과 multiply값을 얻을 수 있도록 제작하였다.
black(0, 1)
-
enum의 경우, 클래스 메서드인 values()를 사용 할 수 있는데, 이는 지정된 열거형에서 입력한 이름과 일치하는 열거형 상수를 반환한다. 따라서 imput1이 orange인 경우:
Colors colors = Colors.valueOf(Colors.class, input1); > Colors.valueOf(Colors.class, "orange"); // Colors.class 안에서 "orange"라는 열거형 상수를 찾는다. long answer = colors.getValue(); // colors의 값은 "orange"를 가리키고 있으므로, orange의 value 3을 answer에 저장한다.
Colors.class 는, 클래스 객체를 의미하는 리터럴이다. 열거형 클래스인 Colors 의 자료들을 담고있는 Class인스턴스의 참조변수와 같다.
- 결과:
이전보다 더 나아진 결과를 확인 할 수 있다.
-