문제(출처: https://www.acmicpc.net/problem/7587)
< Anagrams >
문제 풀이
원래 단어를 저장할 ArrayList, 애너그램 개수를 저장할 ArrayList, 정렬된 단어를 저장할 ArrayList를 사용한다.
if) tan을 입력받았다면
원래 단어를 저장할 ArrayList : tan
애너그램 개수를 저장할 ArrayList : 0
정렬된 단어를 저장할 ArrayList : ant
if) nat을 입력받았다면
nat을 정렬하면 ant가 되므로 정렬된 단어를 저장할 ArrayList에 값이 존재한다. ant의 index를 찾아 애너그램 개수를 저장할 ArrayList의 index 값에 1 증가시킨다.
이런 식으로 애너그램 개수가 가장 많은 것을 찾아 출력한다.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.io.InputStreamReader;
public class _7587_ { // Anagrams
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = 0;
while ((n = Integer.parseInt(bf.readLine())) != 0) {
ArrayList<String> word = new ArrayList<>();
ArrayList<Integer> cnt = new ArrayList<>();
ArrayList<String> sort = new ArrayList<>();
for (int i = 0; i < n; i++) {
String str = bf.readLine();
char[] charArr = str.toCharArray();
Arrays.sort(charArr);
String sortStr = new String(charArr);
if (!sort.contains(sortStr)) {
word.add(str);
cnt.add(0);
sort.add(sortStr);
} else {
int idx = sort.indexOf(sortStr);
cnt.set(idx, cnt.get(idx) + 1);
}
}
int max = 0, idx = 0;
for (int i = 0; i < cnt.size(); i++) {
if (max < cnt.get(i)) {
max = cnt.get(i);
idx = i;
}
}
bw.write(word.get(idx) + " " + max + "\n");
}
bw.flush();
}
}
변수)
n : 단어 개수
word : 원래 단어를 저장할 ArrayList
cnt : 애너그램 개수를 저장할 ArrayList
sort : 정렬된 단어를 저장할 ArrayList
str : 단어
charArr : string -> char 배열
sortStr : 단어 -> 정렬된 단어
max, idx : 애너그램 최댓값, 최댓값 index
단어 개수가 0이 아닐 때까지 입력받아 다음 과정을 반복한다.
1) word, cnt, sort ArrayList 선언
2) 단어 개수만큼 단어를 입력받아 정렬된 단어로 만들기 -> 정렬된 단어가 sort ArrayList에 없다면 word, cnt, sort에 추가 / 있다면 index를 찾아 cnt 값 1 증가
3) cnt를 순환하며 최댓값과 최댓값의 index 찾기
최종 최댓값을 가지는 단어와 최댓값 출력
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 15092_Sheba’s Amoebas (1) | 2024.11.11 |
---|---|
[Baekjoon] 25099_Anagram (0) | 2024.11.08 |
[Baekjoon] 11785_Programming Contest Strategy (0) | 2024.11.06 |
[Baekjoon] 7774_콘센트 (0) | 2024.11.05 |
[Baekjoon] 11235_Polling (0) | 2024.11.04 |