티스토리 뷰

Algorithm

[백준] G4 1339 단어 수학 (java)

코딩브론즈 2021. 1. 2. 00:44

www.acmicpc.net/problem/1339

 

1339번: 단어 수학

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

www.acmicpc.net

 

풀이

 

1) String으로 한줄씩 받아서 charAt()으로 한글자씩 끊어서 맵에 담을거임

2) 몇번째 자리수냐에 따라서 10의 n승을 더해줘야함. 

3) 맵(글자) == null 이면 맵에 추가, != null 이면 기존의 값에 추가

4) 맵을 리스트에 담아서 크기순으로 정렬

5) 9를 1씩 감소시키면서 리스트의 원소에 곱해서 다 더함

6) 출력

 

주의사항

 

1) 없다

 

package com.baekJoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BJ_G4_1339_단어수학 {
	static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	static int N;
	static List<Alpha> alpha = new ArrayList<>();
	public static void main(String[] args) throws NumberFormatException, IOException {
		input = new BufferedReader(new StringReader(src));
		N = Integer.parseInt(input.readLine());
		Map<Character, Integer> map = new HashMap<>();
		for(int n=0; n<N; n++) {
			String line = input.readLine();
			int size = line.length();
			for(int c=0; c<size; c++) {
				char al = line.charAt(c);
				if(map.get(al) == null) {
					map.put(al, (int) Math.pow(10, (size-c-1)));
				}else {
					map.replace(al, map.get(al) + (int) Math.pow(10, (size-c-1)));
				}
			}
		}
		for(Map.Entry<Character, Integer> entry : map.entrySet()) {
			alpha.add(new Alpha(entry.getValue(), entry.getKey()));
        }
		Collections.sort(alpha);
		int num = 9;
		int answer = 0;
		for(int i=0; i<alpha.size(); i++) {
			answer += alpha.get(i).i * num--;
		}	
		System.out.println(answer);
		
	}
	
	static class Alpha implements Comparable<Alpha>{
		int i;
		char c;
		public Alpha(int i, char c) {
			super();
			this.i = i;
			this.c = c;
		}
		@Override
		public String toString() {
			return "Alpha [i=" + i + ", c=" + c + "]";
		}
		
		@Override
		public int compareTo(Alpha o) {
			return Integer.compare(o.i, this.i);
		}
	}

	static String src =
			"2\r\n" + 
			"GCF\r\n" + 
			"ACDEB";
}

 

 

후기

 

처음 이 문제를 보고 A4용지 한 페이지 분량의 설계도를 그렸는데 뭔짓을 해도 시간초과 or 메모리초과가 나올것 같은 느낌이 들어서 힌트를 들었다.

생각을 어떻게 하냐에 따라 한없이 간단해지는것이 알고리즘의 세계인것 같다.

또한 이 문제를 통해 Map.Entry()의 사용법에 대해서 제대로 알게 되었다.

여러모로 얻을것이 많았던 문제였다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함