🌞Algorithm/🔥Baekjoon

[Baekjoon] 7587_Anagrams

뿌야._. 2024. 11. 7. 11:36
문제(출처: 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