반응형
🔺 문제
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
🔺 코드
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
32
33
34
35
36
37
38
39
40
|
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int[] alphabet = new int[26];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
// 입력 받기
for(int i = 0 ; i < N ; i++) {
String str = br.readLine();
// 🔔 자릿수에 따라 가중치 부여
for(int j = 0 ; j < str.length() ; j++) {
alphabet[str.charAt(j) - 'A'] += (int) Math.pow(10, str.length() - 1 - j);
}
}
Arrays.sort(alphabet); // 가중치 오름차순 정렬
int num = 9;
int turn = 25;
int ans = 0;
// 🔔 가중치 높은 것부터 내림차순으로 순회 🔔
// * alphabet[turn] : 현재 순회 중인 알파벳의 가중치
while(alphabet[turn] != 0) {
ans += alphabet[turn] * num; // 📍 가중치가 큰 알파벳에 큰 수 부여
turn--;
num--;
}
System.out.println(ans);
}
}
|
cs |
✅ 해결 아이디어
✔ 그리디
: 1) 가장 많이 나오고, 2) 가장 높은 자리에 위치한 순서대로 가장 높은 숫자 부여
⇨ 각 문자마다 위치한 자릿수에 따라 가중치 정해 더함
(ACDEB에서 10000의 자리면 A에 가중치 10000 부여, C에 가중치 1000 부여, ....)
⇨ 곱해지는 값이 가장 큰 알파벳에 큰 수 할당
💥 유의사항
• 특정 알파벳에 얼만큼의 가중치가 있는지는 신경쓸 필요 X
🔺 다른 풀이들
- HashMap을 사용하셨다.
[BOJ] 백준 1339번 : 단어 수학 (JAVA)
문제 민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다. 단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0
steady-coding.tistory.com
💬 느낀 점
이런 생각은 어떻게 하시는지,,,,,,
아직 배울 점이 많다,,,!!!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[백준] 1339번 - 단어 수학 (Java)
풀이 키워드 그리디 알고리즘 단어의 합의 최댓값을 구하기 위해서는 (1. 가장 많이 나오고) (2. 가장 높은 자리에 위치) 한 순서대로 가장 높은 숫자를 부여하면 된다. 그때 그때 가장 최선의 경
mountain96.tistory.com
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1261번: 알고스팟 (0) | 2023.09.01 |
---|---|
[백준/JAVA] 14225번: 부분수열의 합 (0) | 2023.09.01 |
[백준/JAVA] 2133번: 타일 채우기 (0) | 2023.08.31 |
[백준/JAVA] 2529번: 부등호 (0) | 2023.08.31 |
[백준/JAVA] 11057번: 오르막 수 (0) | 2023.08.30 |