Algorithm/๊ทธ๋ฆฌ๋””(Greedy)

[ ๋ฐฑ์ค€, Java] 1339๋ฒˆ : ๋‹จ์–ด ์ˆ˜ํ•™

Zayson 2022. 4. 27. 23:20

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/1339

๐Ÿค” ๋ฌธ์ œ

๋ฏผ์‹์ด๋Š” ์ˆ˜ํ•™ํ•™์›์—์„œ ๋‹จ์–ด ์ˆ˜ํ•™ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ์ˆ™์ œ๋ฅผ ๋ฐ›์•˜๋‹ค.

๋‹จ์–ด ์ˆ˜ํ•™ ๋ฌธ์ œ๋Š” N๊ฐœ์˜ ๋‹จ์–ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ๋‹จ์–ด๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ด๋•Œ, ๊ฐ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋ฅผ 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ ํ•˜๋‚˜๋กœ ๋ฐ”๊ฟ”์„œ N๊ฐœ์˜ ์ˆ˜๋ฅผ ํ•ฉํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์€ ๊ฐ™์€ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์•ผ ํ•˜๋ฉฐ, ๋‘ ๊ฐœ ์ด์ƒ์˜ ์•ŒํŒŒ๋ฒณ์ด ๊ฐ™์€ ์ˆซ์ž๋กœ ๋ฐ”๋€Œ์–ด์ง€๋ฉด ์•ˆ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, GCF + ACDEB๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค๊ณ  ํ•  ๋•Œ, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7๋กœ ๊ฒฐ์ •ํ•œ๋‹ค๋ฉด, ๋‘ ์ˆ˜์˜ ํ•ฉ์€ 99437์ด ๋˜์–ด์„œ ์ตœ๋Œ€๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

N๊ฐœ์˜ ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์ˆ˜์˜ ํ•ฉ์„ ์ตœ๋Œ€๋กœ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ˜ฎ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ž๋ฆฟ์ˆ˜๊ฐ€ ํฐ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ๋†’์€ ์ˆซ์ž๋ฅผ ๋ฐฐ์ •ํ•ด์•ผ ๊ณ„์‚ฐ์„ ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ํฐ ํ•ฉ๊ณ„๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๋ฌธ์ œ์˜ ์˜ˆ์ œ์˜ ๋‹จ์–ด ์ˆ˜ํ•™ ์‹์„ ์ž๋ฆฟ์ˆ˜๋กœ ํ‘œํ˜„ํ•ด๋ณด๋ฉด, GCF = 100G + 10C + 1F ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ACDEB = 10000A + 1000C + 100D + 10E + 1B๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์ด๋ ‡๊ฒŒ ์ž๋ฆฟ์ˆ˜๋กœ ํ‘œํ˜„ํ•œ ์•ŒํŒŒ๋ฒณ์„ ๊ฐ๊ฐ ์•ŒํŒŒ๋ฒณ์ด ์ธ๋ฑ์Šค๋กœ ๋œ ๋ฐฐ์—ด์— ๋‹ด์•„์ฃผ๊ณ  ์ •๋ ฌํ•ด์ค€ ํ›„, ๊ฐ’์ด ๊ฐ€์žฅ ๋†’์€ ์•ŒํŒŒ๋ฒณ๋ถ€ํ„ฐ 9๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์ •ํ•ด์ฃผ๋ฉด ๊ฐ€์žฅ ํฐ ํ•ฉ๊ณ„๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

image

๐Ÿšฉ Java ์ฝ”๋“œ

package com.algorithm.Baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main_1339_๋‹จ์–ด_์ˆ˜ํ•™ {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String[] words = new String[N];
        for(int loop =0; loop < N; loop++) {
            words[loop] = br.readLine();
        }

        int rst = getSum(words);
        System.out.println(rst);
        br.close();
    }

    private static int getSum(String[] words) {
        int[] alphabet = new int[26];

        for(String word : words) {
            int digit = word.length() - 1;
            // ์•ŒํŒŒ๋ฒณ A ๊ฐ€ 0๋ฒˆ ์ธ๋ฑ์Šค, ๋จผ์ € ๋‚˜์˜จ ์ˆ˜๋ถ€ํ„ฐ ์ž๋ฆฟ์ˆ˜ -1์”ฉ Loop
            for(char letter : word.toCharArray()) {
                int index = letter - 'A';
                alphabet[index] += (int) Math.pow(10,digit);
                digit--;
            }
        }

        // ์ •๋ ฌ
        Arrays.sort(alphabet);
        int index = alphabet.length-1;
        int maxNumber = 9;
        int sum = 0;

        // ์ž๋ฆฟ์ˆ˜์˜ ๊ฐ’์ด ๊ฐ€์žฅ ๋†’์€ ์ˆœ์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ์ˆซ์ž ๋ถ€์—ฌ
        while(maxNumber >= 0 &&  alphabet[index] > 0) {
            sum += alphabet[index] * maxNumber;
            maxNumber--;
            index--;
        }
        return sum;
    }
}
๋ฐ˜์‘ํ˜•