728x90
안녕하세요. 개발자 엄탱입니다.
이 글은 알고리즘을 공부하면서 공부 기록용입니다.
그래서 설명마다 일기용으로 편하게 작성하여 반말 형식으로 작성하려고 합니다.
그리고 보시다가 더 좋은 방법이나 잘 못 알고 있는 내용이 있다면 알려주시면 정말 감사하겠습니다.
좋은 하루 되세요 :)
문제 링크
https://www.acmicpc.net/problem/1157
문제 설명
주어진 영어 단어 중에 대소문자 구분 없이 가장 많이 사용된 알파벳을 출력하면 된다.
단, 최댓값이 중복되면 '?'를 출력 하면 된다.
해설
해당 문제는 알파벳을 숫자로 변환하는게 핵심이다.
배열을 하나 만들고 알파벳을 숫자로 변환하여 해당 숫자의 인덱스에 해당하는 값을 +1씩 증가시켜서 단어의 알파벳의 개수들을 기록해 준다.
그 후에 최대 개수를 파악해주고 개수가 중복되면 '?'를 출력하고 아니면 해당 인덱스를 다시 알파벳으로 변환하여 출력하면 된다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine().toUpperCase();
int[] counts = new int['Z' - 'A' + 1];
for (int i = 0; i < s.length(); i++) {
counts[s.charAt(i) - 'A']++;
}
int max = 0;
char answer = '?';
for (int i = 0; i < counts.length; i++) {
if (max < counts[i]) {
max = counts[i];
answer = (char) ('A' + i);
} else if (max == counts[i]) {
answer = '?';
}
}
System.out.println(answer);
br.close();
}
}
코드 설명
- 우선 대소문자 구분이 없으니 대문자 혹은 소문자로 치환해 준다. 대문자든 소문자든 상관없다.
- 배열의 길이를 A, B, C... Z의 총개수만큼 만들어준다.
그 외에는 코드를 보면서 이해하면 될 것 같다.
728x90
'알고리즘 > 문자열' 카테고리의 다른 글
[자바]백준 1316번 그룹 단어 체커 [문자열][엄탱] (5) | 2023.02.15 |
---|---|
[자바]백준 11721번 열 개씩 끊어 출력하기 [문자열][엄탱] (3) | 2023.02.15 |
[자바]백준 9012번 괄호 [문자열][엄탱] (2) | 2023.02.15 |
[자바]백준 1152번 단어의 개수 [문자열][엄탱] (3) | 2023.02.14 |
[자바]백준 25641번 균형 잡힌 소떡소떡 [문자열][엄탱] (6) | 2023.02.14 |