728x90
백준 단계별 문제풀이 6단계 (심화1)
https://www.acmicpc.net/problem/1157
# 문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
# 예제
입력 - 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000 이
Mississipi
출력 - 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다
?
# 필요개념
대소문자 구분 없고 출력은 대문자로 하기 때문에 받은 문자열을 toUpperCase() 메소드를 이용하여 대문자로 바꾸었다.
이후 알파벳 개수만큼의 사이즈를 갖는 int형 배열을 만들어 0으로 채워넣은 후, 나오는 알파벳의 자리 값을 1씩 더해갔다. 이 과정에서 아스키코드 (A가 65라는 점)을 이용했다.
다음 반복문으로 최댓값과 그의 인덱스를 구하고, 또 다른 반복문으로는 max와 같은 값이 또 있는가 즉, 최댓값이 2개 이상 있는가를 확인하여 문제를 풀었다.
특별히 필요한 개념은 없었지만, 단순 반복문을 너무 많이 사용한 거 같다. 더 효율적인 방법을 찾아보고싶다.
# Code
import java.io.*;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String ans = br.readLine().toUpperCase();
int[] eng = new int[26];
Arrays.fill(eng,0);
for (int i = 0 ; i < ans.length() ; i++) {
eng[ans.charAt(i) - 65]++;
}
int max = -1;
int index = -1;
for (int i = 0 ; i < eng.length ; i++) {
if (eng[i] > max) {
max = eng[i];
index = i;
}
}
int cnt = -1;
for (int i = 0 ; i < eng.length ; i++) {
if (max == eng[i]) cnt++;
}
if (cnt != 0) System.out.println("?");
else System.out.println((char)(65 + index));
}
}
# 결과
'코딩테스트 > 백준 브론즈,실버' 카테고리의 다른 글
[백준] 1316 : 그룹 단어 체커 - JAVA (1) | 2024.01.15 |
---|---|
[백준] 2941 : 크로아티아 알파벳 - JAVA (0) | 2024.01.15 |
[백준] 11654 : 아스키코드 (System.in에 대해) - JAVA (0) | 2024.01.15 |
[백준] 9086 : 문자열 (next와 nextLine) - JAVA (1) | 2024.01.15 |
[백준] 1546 : 평균 (스트림 실수형 매핑 _ mapToDouble()) - JAVA (1) | 2024.01.14 |