티스토리 뷰
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()의 사용법에 대해서 제대로 알게 되었다.
여러모로 얻을것이 많았던 문제였다.
'Algorithm' 카테고리의 다른 글
[백준] S4 1244 스위치 켜고 끄기 (java) (0) | 2021.01.02 |
---|---|
[백준] S5 1436 영화감독 숌 (java) (0) | 2021.01.02 |
[백준] S4 10816 숫자 카드 2 (java) (0) | 2021.01.01 |
[백준] S4 10815 숫자 카드 (java) (0) | 2021.01.01 |
[백준] B2 2596 비밀 편지 (java) (0) | 2020.12.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 구현
- PriorityQueue
- map
- 리액트 네이티브
- react native
- react
- BFS
- 리액트
- 그리디
- 현꾸라지
- 객체지향
- 자바
- g4
- 알고리즘
- 코딩새내기
- G5
- laugh4mile
- S2
- 다익스트라
- 시뮬레이션
- SWEA
- 우선순위큐
- Spring
- 백준
- 문자열
- S3
- Spring Boot
- 백트래킹
- java
- DFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함