1) Scanner을 이용한 풀이
import java.util.Scanner;
public class Back_1157 {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
// 알파벳 만큼의 배열 생성
int[] arr = new int[26];
// 입력받은 문자를 탐색해 소문자인지 대문자인지 판별하기 위한 반복문
for (int i = 0; i < str.length(); i++) {
// 소문자일 경우
if (str.charAt(i) <= 'z' && 'a' <= str.charAt(i)) {
arr[str.charAt(i)-'a']++;
}
// 대문자일 경우
else if (str.charAt(i) <= 'Z' && 'A' <= str.charAt(i)) {
arr[str.charAt(i)-'A']++;
}
}
int max = 0;
for (int i = 0; i < arr.length; i++) {
// 가장 많이 사용된 문자를 확인하기 위한 조건문
// arr[i] 배열을 탐색해서 값이 가장 높은 값을 변수 max에 저장한다.
if (arr[i] > max) {
max = arr[i];
// baaa라면 {3,1,0,0,0,0,0,0 ... 중략}
// i+'A'는 숫자 형태기 때문에 char에 담기 위해선 형변환을 해줘야 한다.
char result = (char)(i+'A');
}
// 가장 많이 사용된 문자의 중복을 확인하기 위한 조건문
// 가장 많이 사용된 문자가 또 있다면 ? (위의 if문에 걸리지 않은 것이다.)
else if (max == arr[i]) {
char result = '?';
}
}
System.out.println(result);
}
}
2) Buffered를 활용한 풀이
● Scanner로 풀이한 것과 별반 다를바 없지만 속도 차이가 어마어마하다.
import java.io.*;
public class Back_1157_buffered {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int[] arr = new int[26];
for (int i = 0; i < str.length(); i++) {
if ('a' <= str.charAt(i) && str.charAt(i) <= 'z') {
arr[str.charAt(i)-'a']++;
}
else if ('A' <= str.charAt(i) && str.charAt(i) <= 'Z') {
arr[str.charAt(i)-'A']++;
}
}
int max = 0;
// 따로 변수를 초기화하고 써도 상관은 없다.. ㅎㅎ
char result = ' ';
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
result = (char)(i+'A');
} else if (arr[i] == max) {
result = '?';
}
}
System.out.println(result);
}
}
'알고리즘 정리' 카테고리의 다른 글
백준 2098번[문자열] 상수 (0) | 2021.10.20 |
---|---|
백준 1152번[문자열] 단어의 개수 (0) | 2021.10.20 |
백준 2675번[문자열] 문자열 반복 (0) | 2021.10.20 |
백준 10809번[문자열] 알파벳 찾기 (0) | 2021.10.20 |
백준 11720번[문자열] 숫자의 합 (0) | 2021.10.20 |