문제 : https://www.acmicpc.net/problem/1076

풀이 방법


  1. 첫 번째 접근 방법

처음에는 Map이라는 자료구조를 사용해야 한다는 느낌을 받았지만, 조금 복잡하게 생각을 했었습니다. 아마도 문제의 패턴을 몰랐기 때문일 것입니다. 그래서 저는 값과 곱을 가지는 Class를 만들어서 이 클래스 타입의 ArrayList를 만들려고 시도했습니다. 하지만, 이렇게 되면 인덱스로 원소에 접근을 해야하는 문제와 시간 복잡도가 커질 수 있는 문제가 발생하여 비효율적임을 알게 되었습니다.

  1. 두 번째 접근 방법

이번에는 다른 방식을 생각했습니다. 값과 곱의 규칙을 찾아내어 Class를 따로 만들 필요가 없음을 알았습니다. 10^값 = 곱 이라는 규칙을 찾아 냈습니다. 쉽게 설명하면 값이 0일 때, 곱은 1 값이 1일 때, 곱은 10, 값이 2일 때, 곱은 100 … 이런 규칙성을 찾을 수 있었고, Map이라는 자료 구조에 String을 키로 하고, Integer를 값으로 하는 Map을 생성했고, 데이터를 넣어놓았습니다.

그리고 문제에서 입력은 3개 뿐이므로, 반복문을 통해 입력을 받기보다는 바로 받아서 처리하는 것이 효율적이라고 판단했습니다. 코드는 아래에 있습니다.

  • 배운 점
    ** Map이라는 자료구조는 내가 생각하는 것보다 다양한 곳에서 쓰이는 것 같습니다. 이러한 자료구조를 사용해서 문제를 풀 수 있도록 많이 생각해보고 문제도 많이 풀어봐야 할 것 같습니다. :)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class BOJ1076 {
public static void main(String[] args) throws IOException {
// 저항 문제는 Map 자료구조를 사용해서 풀 수 있다.
// 문제에서 입력은 세 개이므로 for문을 돌려서 받지 않고 그냥 한번에 받는 것이 더 간단.

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
Map<String, Integer> map = new HashMap<>();

map.put("black", 0);
map.put("brown", 1);
map.put("red", 2);
map.put("orange", 3);
map.put("yellow", 4);
map.put("green", 5);
map.put("blue", 6);
map.put("violet", 7);
map.put("grey", 8);
map.put("white", 9);

String one = bf.readLine(), two = bf.readLine(), three = bf.readLine();


int firstResult = map.get(one) * 10 + map.get(two);
long secondResult = (long) Math.pow(10, map.get(three));
System.out.println(firstResult * secondResult);


}
}