문제 : abc252_c
arr[a][b]는 a라는 수(0<=a<=9)가 b번째에 나온 횟수를 의미한다. 예를들어 Sample Input 1의 경우 다음과 같다.
3
1937458062
8124690357
2385760149
여기서 행끼리 보면 어느 수(0~9)를 선택했을 때 가장 작은 초가 나오는지 확인할 수 있다. 예를들어 arr[0]의 경우 6번 인덱스에 2번 나오고, 7번 인덱스에 1번 나왔다. 따라서 6->7->16(=6+10)으로 눌러야 하므로 16초가 필요하다. arr[1]의 경우엔 0->1->7이므로 7초, arr[2]는 0->2->9이므로 9초... 이런식이다. 이 중 가장 작은 것은 arr[8]로 0->2->6으로 6초가 된다.
이런식으로 arr[a][b]를 구해둘 시 arr[0]~arr[9] 각각의 초를 구하고, 그 중 가장 작은 초를 출력해주면 된다.
코드 : github
...
private int getTime(int[] cnt) {
int max = 0;
for (int i = 0; i < 10; i++) {
int calc = i+(cnt[i]-1)*10;
max = Math.max(calc, max);
}
return max;
}
private void solution() throws Exception {
int n = nextInt();
int[][] arr = new int[10][10];
for (int i = 0; i < n; i++) {
String reel = nextLine();
for (int j = 0; j < 10; j++) {
arr[reel.charAt(j)-'0'][j]++;
}
}
int min = Integer.MAX_VALUE;
for (int i = 0; i < 10; i++) {
min = Math.min(min, getTime(arr[i]));
}
System.out.println(min);
}
...
댓글