728x90
문제
문제 링크 : https://www.acmicpc.net/problem/1076
아래과 같은 데이터 테이블이 주어진다.
총 세개의 숫자가 저항 변수로 주어질 때,
첫 번째 색상에 해당하는 값을 10의 자리,
두 번째 색상에 해당하는 값을 1의 자리로 하는 값에
세 번째 색상에 해당하는 곱을 곱하여 나온 결과(총 저항)를 출력하시오.
원리
주어진 데이터를 입력 테이블(input_table)로 산정하고,
입력된 데이터를 HashMap으로 된 데이터(data)로 재편성했다.
이후, 자료구조로 된 데이터에서 필요한 값을 조회하여 출력한다.
이 경우, input_table을 저장하는 초기에 메모리가 많이 소요될 수 있으나,
이후 한 가지 데이터 테이블로부터 여러번의 테스트 케이스를 조회하는 연산을 이용할 경우,
HashMap을 이용하므로 다음과 같은 이점이 있다.
1. 이중배열을 이용해 순차적으로 색상값을 조회하는 방식에 비해, 비 순차적인 Map구조를 이용함으로써 연산 속도가 빠르다,
2. 색상에 대한 값을 수정하는 일부 데이터 수정(update)에 용이하다.
나의 코드
public class no1076 {
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static int T;
private static String[][] input_table =
{{"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"}};
private static Map<String, String[]> data = new HashMap<>();
public static void main(String[] args) throws IOException {
for(String[] arr : input_table) {
data.put(arr[0], new String[]{arr[1], arr[2]});
}
String head = data.get(br.readLine())[0] + data.get(br.readLine())[0];
BigInteger result =
new BigInteger(head).multiply(new BigInteger(data.get(br.readLine())[1]));
System.out.println(result);
}
}
728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > JAVA' 카테고리의 다른 글
[백준] no11504:바이토닉 수열 - 바이토닉 정렬(Bitonic) (0) | 2023.08.25 |
---|---|
[백준] no2638:치즈 - BFS, DFS (0) | 2023.08.24 |
[백준] no1987:알파벳 (0) | 2023.08.20 |
[백준] no1267: 핸드폰 요금 - 구현 (진행중) (0) | 2023.08.11 |
[백준] no11282: 한글 - 유니코드 변환 공식 (0) | 2023.08.10 |