728x90
문제 해석
Mississipi
이런 예제가 있을 때 i는 4개, s도 4개로 가장 많이 사용한 알파벳이 여러개 존재하기 때문에 ?를 출력
zZa
이 예제는 대소문자를 구분하지 않기 때문에 Z를 출력
나머지 예제들도 비슷하지만 주의점이 소문자가 많이 반복되어도 출력은 항상 대문자로 해야한다.
접근
문자열에서 가장 많이 등장한 알파벳 찾기(대소문자 구분 x)
- 각 알파벳의 개수를 구한다
- 그 중 최댓값을 구한다.
풀이
아마 키 포인트는 대소문자를 구분하지 않는다는 것과 가장 많이 나온 알파벳의 갯수가 중복된다면 ‘?’를 출력시켜야 하는 것일듯 하다.
package learnString;
import java.util.Scanner;
class Main {
public static int[] getAlphabetCount(String str) {
int[] count = new int[26];
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if ('A' <= ch && 'Z' >= ch) {
count[ch - 'A']++;
} else {
count[ch - 'a']++;
}
}
return count;
}
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next(); // 대소문자로 이루어진 단어
int[] count = getAlphabetCount(str);
int maxCount = -1;
char maxAlphabet = '?';
for (int i = 0; i < 26; i++) {
if (count[i] > maxCount) {
maxCount = count[i];
maxAlphabet = (char)('A' + i);
} else if (count[i] == maxCount) { // 가장 많이 나온 알파벳의 개수와 현재의 알파벳의 개수가 같으면 ?로 만들어주기
maxAlphabet = '?';
}
}
System.out.println(maxAlphabet);
}
}
리펙토링
package learnString;
import java.util.Scanner;
class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next().toUpperCase(); // 대소문자로 들어오는 문자열을 대문자로 통일시키기
int maxCount = -1;
char maxAlphabet = '?';
int[] count = new int[26];
for (int i = 0; i < str.length(); i++) {
count[str.charAt(i) - 'A']++; // 모두 대문자이기 때문에 따로 조건문 검사를 해주지 않아도 괜찮다.
}
for (int i = 0; i < 26; i++) {
if (count[i] > maxCount) {
maxCount = count[i];
maxAlphabet = (char)('A' + i);
} else if (count[i] == maxCount) {
maxAlphabet = '?';
}
}
System.out.println(maxAlphabet);
}
}
int[] count = new int[26];
for (int i = 0; i < str.length(); i++) {
count[str.charAt(i) - 'A']++; // 모두 대문자이기 때문에 따로 조건문 검사를 해주지 않아도 괜찮다.
}
이 부분을 함수로 따로 만들어도 괜찮지만 어차피 중복된 내용이 아니어서 안에 넣어도 될 듯 싶다. 여기서 요점은 대소문자를 구분하지 않는 문제가 나온다면 모두 대문자나 소문자로 통일 시켜서 정렬해주는 것이 좋을 것 같다.
반응형
'coding test' 카테고리의 다른 글
문자열 - 백준_13223_소금폭탄 (1) | 2024.03.06 |
---|---|
문자열 - 백준 1543번 문서검색 (0) | 2024.03.06 |
문자열 - 백준 1919번 애너그램 만들기 (0) | 2024.03.04 |
자바 문자열 관련 문제 (0) | 2024.02.29 |
2차원 배열 - 프로그래머스 교점에 별찍기 (1) | 2024.02.19 |