백준 1009 분산처리, 백준 1076 저항, 백준 1052 물병
문제주소
백준 1009 분산처리 www.acmicpc.net/problem/1009
1009번: 분산처리
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)
www.acmicpc.net
백준 1076 저항 www.acmicpc.net/problem/1076
1076번: 저항
첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 색은 모두 위의 표에 쓰여 있는 색만 주어진다.
www.acmicpc.net
백준 1052 물병 www.acmicpc.net/problem/1052
1052번: 물병
지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번
www.acmicpc.net
내 풀이
private static void bj1009() throws IOException {
int[][] remains = {
{10},
{1},
{6, 2, 4, 8},
{1, 3, 9, 7},
{6, 4},
{5},
{6},
{1, 7, 9, 3},
{6, 8, 4, 2},
{1, 9}
};
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int ts = Integer.parseInt(br.readLine());
for (int i = 0; i < ts; i++) {
String[] pair = br.readLine().split(" ");
int a = Integer.parseInt(pair[0]) % 10;
int b = Integer.parseInt(pair[1]);
if (a == 0 || a == 1 || a == 5 || a == 6) {
System.out.println(remains[a][0]);
} else if (a == 4 || a == 9) {
System.out.println(remains[a][b % 2]);
} else {
System.out.println(remains[a][b % 4]);
}
}
}
private static void bj1076() throws IOException {
Map<String, Integer> resistance = new HashMap<>(Map.of(
"black", 0,
"brown", 1,
"red", 2,
"orange", 3,
"yellow", 4,
"green", 5,
"blue", 6,
"violet", 7,
"grey", 8,
"white", 9
));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input1 = br.readLine();
String input2 = br.readLine();
String input3 = br.readLine();
int two = resistance.get(input1) * 10 + resistance.get(input2);
if (two == 0) {
System.out.println("0");
} else {
StringBuilder answer = new StringBuilder();
answer.append(two);
answer.append("0".repeat(resistance.get(input3)));
System.out.println(answer);
}
}
private static void bj1052() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int k = Integer.parseInt(input[1]);
if (Integer.bitCount(n) <= k) {
System.out.println("0");
return;
}
int newCount = 1;
while (Integer.bitCount(n + newCount) > k) {
newCount++;
}
System.out.println(newCount);
}
정리
자바로 알고리즘 문제를 많이 안 풀어서 단순히 입출력을 받는 것도 많이 헤맸다. BufferedReader로 읽어오는 것, 반복되는 값은 배열로 정리하는 것이 편하다는 것 (다소 하드코딩 되어있지만..ㅠㅠ), 문자열에 StringBuilder를 적용하는 것 등을 느꼈다. 물병 문제가 가장 오래걸렸는데 2진법스러운 느낌이 나는 문제는 binary 형태로 풀면 편하다! 😁 일단 푸는게 제일 중요한데 시간!! 이 문제들을 풀면서 효율성을 많이 생각하게 되었다! (자꾸 통과 안 되면 시간때문인가ㅠㅠ 하면서 성능을 높이기 위해 고민을 많이 했다)