728x90
import java.util.*;
import java.io.*;
//알파벳 대소문자로 된 단어가 주어지면,
//이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오.
//단, 대문자와 소문자를 구분하지 않는다.
public class B1157 {
public static void main(String[] args) throws IOException {
// 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String array = br.readLine().toUpperCase();
// 횟수 체크용 배열
int[] letterCheck = new int["abcdefghijklmnopqrstuvwxyz".length()];
// 횟수 체크
for (int i = 0; i < array.length(); i++) {
int index = array.charAt(i) - 'A';
letterCheck[index]++;
}
// 위 배열을 이용해 최대치, 결과치 얻기
int max = -1;
char result = 0;
for (int j = 0; j < letterCheck.length; j++) {
if (letterCheck[j] > max) {
max = letterCheck[j];
result = (char) (j + 'A');
} else if (letterCheck[j] == max) {
result = '?';
}
}
// 결과 출력
System.out.println(result);
}
}
풀이 방법
- BufferedReader로 입력 받는다. 대소문자를 구분하지 않는다고 했으므로, 입력받은 단어를 .toUpperCase로 통일한다. 2. letterhCheck : a~z까지 각 알파벳이 몇번 등장했는지 체크하는 배열.
- for문
입력받은 단어를 하나씩 돌아가면서 체크한다.
array.charAt(i)로 각 알파벳을 char로 바꾸고, 'A'를 뺌으로서 letterCheck의 인덱스와 같이 한다.
ex)
'A'-'A' = 0 (첫번째)
'C'-'A' = 2 (세번째)
4. max는 최대치, result는 가장 많은 알파벳을 나타낸다.
- for 문을 통해 letterCheck에서 max를 고르고,
- 만약 max와 같은 수가 있다면 '?'로 바꾸고,
- 끝이 날 때까지 반복함
아쉬운 점
- result같은 경우엔 '?' 로 초기화 했어도 좋았을 것 같다. 예외적 상황에 원하는 결과가 나오지 않았을 것 같다. 0으로 설정했을 경우, 모든 배열이 0개일 때 '?'도 'max'도 나오지 않았을 것.
- 마지막 for문 대신, sort를 이용해 맨 끝에서 두개만 비교했어도 괜찮았을 것 같다. 모든 표를 돌아가며 고르지 않아도 될 것 같다.
728x90
'프로그래밍(Programming) > 알고리즘' 카테고리의 다른 글
프로그래머스 : 스킬트리 (0) | 2022.12.21 |
---|---|
프로그래머스 : 완주하지 못한 선수 (0) | 2022.11.15 |
다음에 올 숫자 (0) | 2022.11.09 |
프로그래머스 : 옹알이(1) (0) | 2022.11.07 |
[프로그래머스] 평행 (0) | 2022.11.02 |