백준(Java)/23년 9월

[Java] 백준 - 1339번: 단어 수학

C0MPAS 2023. 9. 6. 14:24

9월 6일(수) - 그리디 알고리즘 (1339번)

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

문제점

        // 수정 전
        
        String word;
        for(int i=0; i<N; i++)
        {
            word = br.readLine();

            for(int j=word.length()-1; j>=0; j--)
            {
                Integer ch = word.charAt(j) - 'A';
                alphabet[ch] = alphabet[ch] + (int) Math.pow(10, (double)word.length() - 1 - j);
            }
        }
        
        // 수정 후

        Arrays.fill(alphabet, 0);
        for(int i=0; i<N; i++)
        {
            char input[] = br.readLine().toCharArray();
            int pos = 1;

            for(int j=input.length-1; j>=0; j--)
            {
                alphabet[input[j] - 'A'] += Integer.valueOf(pos);
                pos *= 10;
            }
        }

1. 내림차순 정렬을 위해서는 Integer[ ] alphabet의 형태로 배열을 선언해야함

-> 이렇게되면 원래 double형인 Math.pow의 결과값을 Integet형으로 변환할 수 없음

 

-> char input[ ]로 입력받고, toCharArray 메서드를 사용

-> Math.pow 대신에, valueOf와 그 안에 들어가는 pos를 10배씩 곱해서 늘려준다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이

(풀이출처 -> https://dding9code.tistory.com/7)

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

import java.util.Arrays;
import java.util.Collections;

public class Main {

    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        Integer[] alphabet = new Integer[26];
        int N = Integer.parseInt(br.readLine());

        Arrays.fill(alphabet, 0);
        for(int i=0; i<N; i++)
        {
            char input[] = br.readLine().toCharArray();
            int pos = 1;

            for(int j=input.length-1; j>=0; j--)
            {
                alphabet[input[j] - 'A'] += Integer.valueOf(pos);
                pos *= 10;
            }
        }
        /*
        String word;
        for(int i=0; i<N; i++)
        {
            word = br.readLine();

            for(int j=word.length()-1; j>=0; j--)
            {
                Integer ch = word.charAt(j) - 'A';
                alphabet[ch] = alphabet[ch] + (int) Math.pow(10, (double)word.length() - 1 - j);
            }
        }
         */

        Arrays.sort(alphabet, Collections.reverseOrder());

        int max = 0;
        for(int i=0; i<10; i++)
        {
            max = max + alphabet[i] * (9-i);
        }

        System.out.println(max);
    }
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ