본문 바로가기
PS/AtCoder

[ABC252] C - Slot Strategy (AtCoder Beginner Contest 252 in Java)

by Nahwasa 2022. 5. 22.

문제 : 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);
}
...

댓글