문제 링크 : https://www.acmicpc.net/problem/1157
난이도 |
알고리즘 | |
브론즈1 | 구현, 문자열 |
1. 요구 사항 이해
시간, 메모리 제한 : 2초 / 128MB
대소문자가 섞인 단어에서 가장 많이 사용된 알파벳 식별 후 대문자로 출력
단어의 길이는 1,000,000 넘지 않음
빈도수가 가장 높은 알파벳이 여러개인 경우 '?' 출력
2. 설계/검증
소문자와 대문자는 같은 알파벳인 경우 하나로 처리
- toUpperCase() 로 전부 대문자 처리
가장 빈도 높은 알파벳과 그 빈도 수를 저장할 변수
시간 복잡도 | 최악의 경우 | 공간 복잡도 |
O(N) | 1,000,000 | O(1) |
함수화
String word;
private static void findMostFrequentAlphabet(w){
}
3. 정상 코드
import java.util.*;
public class Main {
// 주어진 문자열에서 가장 빈도가 높은 알파벳을 찾는 메서드
private static void findMostFrequentAlphabet(String w){
// 알파벳의 등장 빈도를 저장할 배열 초기화
int[] alphabetCount = new int[26];
// 문자열을 순회하며 각 알파벳의 등장 횟수를 계산
for (int i = 0; i < w.length(); i++) {
char currentChar = w.charAt(i);
alphabetCount[currentChar - 'A']++;
}
// 가장 빈도가 높은 알파벳과 그 빈도 수를 저장할 변수 초기화
char maxChar = '?';
int maxCount = 0;
// 알파벤 빈도 배열을 순회하며 가장 빈도가 높은 알파벳 찾기
for (int i = 0; i < alphabetCount.length; i++) {
if (alphabetCount[i] > maxCount) {
maxCount = alphabetCount[i];
maxChar = (char)('A' + i);
} else if (alphabetCount[i] == maxCount) {
maxChar = '?';
}
}
System.out.println(maxChar);
}
public static void main(String[] args) {
// 사용자로부터 입력 받은 단어를 대문자로 변환하여 저장
Scanner scan = new Scanner(System.in);
String word = scan.next().toUpperCase();
scan.close();
// 가장 빈도 높은 알파벳을 찾는 메서드 호출
findMostFrequentAlphabet(word);
}
}
4. 처리 과정 추적 코드
import java.util.*;
public class Main {
// 주어진 문자열에서 가장 빈도가 높은 알파벳을 찾는 메서드
private static void findMostFrequentAlphabet(String w) {
// 알파벳의 등장 빈도를 저장할 배열 초기화
int[] alphabetCount = new int[26];
System.out.printf("\n------------------------\n");
System.out.println("알파벳 카운트 배열 초기화: " + Arrays.toString(alphabetCount));
// 문자열을 순회하며 각 알파벳의 등장 횟수를 계산
for (int i = 0; i < w.length(); i++) {
char currentChar = w.charAt(i);
alphabetCount[currentChar - 'A']++;
System.out.printf("현재 처리하는 문자: %c\n", currentChar);
System.out.println("알파벳 카운트 배열: " + Arrays.toString(alphabetCount));
}
// 가장 빈도가 높은 알파벳과 그 빈도 수를 저장할 변수 초기화
char maxChar = '?';
int maxCount = 0;
// 알파벤 빈도 배열을 순회하며 가장 빈도가 높은 알파벳 찾기
System.out.printf("\n------------------------\n");
for (int i = 0; i < alphabetCount.length; i++) {
if (alphabetCount[i] > maxCount) {
maxCount = alphabetCount[i];
maxChar = (char) ('A' + i);
System.out.printf("현재 최다빈도 알파벳: %c\n", maxChar);
System.out.printf("현재 최다빈도 알파벳 빈도 수: %d\n", maxCount);
} else if (alphabetCount[i] == maxCount) {
maxChar = '?';
}
}
System.out.println("결과 : " + maxChar);
}
public static void main(String[] args) {
// 사용자로부터 입력 받은 단어를 대문자로 변환하여 저장
Scanner scan = new Scanner(System.in);
System.out.printf("단어 입력: ");
String word = scan.next().toUpperCase();
scan.close();
// 가장 빈도 높은 알파벳을 찾는 메서드 호출
findMostFrequentAlphabet(word);
}
}
추가 정리
Arrays.toString(count)
배열을 출력할 때 사용하는 함수
toUpperCase()
소문자를 대문자로 변환하는 함수
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준](2024) 소금 폭탄 (설명/코드/정답) (0) | 2024.02.20 |
---|---|
[백준](2024) 문서 검색 (설명/코드/정답) (0) | 2024.02.20 |
[백준](2024)애너그램 만들기(설명/코드/정답) (0) | 2024.02.19 |
[백준](2024)대소문자 바꾸기(설명/코드/정답) (0) | 2024.02.19 |
[백준] 깃허브 자동 커밋 연동(2024) (0) | 2024.02.17 |