(Java/Java) 1157 – 단어 공부
https://www.acmicpc.net/problem/1157
문제
알파벳 대문자와 소문자 단어가 주어지면 이 단어에서 가장 많이 사용되는 알파벳이 무엇인지 확인하는 프로그램을 만듭니다.
다만, 대문자와 소문자를 구별하지 않는다.
입력
첫 번째 줄에는 알파벳 대문자와 소문자 단어가 주어집니다.
주어진 단어의 길이는 1,000,000을 초과하지 않습니다.
출력
첫 번째 줄에 대문자로 이 단어에서 가장 많이 사용되는 알파벳을 출력합니다.
다만, 가장 많이 사용된 알파벳이 복수 존재하는 경우에는 ? 를 출력한다.
입력 예 1 복사
Mississipi
출력 예 1 복사
?
샘플 입력 2 복사
zZa
출력 예 2 복사
Z
입력 예 3 복사
z
출력 예 3 복사
Z
입력 예 4 복사
baaa
출력 예 4 복사
A
로직 1
- 입력된 캐릭터 라인의 대문자와 소문자를 구별하지 않고, 결과치로서 가장 자주(잘) 사용되는 알파벳을 대문자로 돌려줄 필요가 있기 때문에, 입력 캐릭터 라인을 toUpperCase 메소드도 대문자 변환
- 가장 사용되고 있는 알파벳이 복수 존재할지 어떨지를 기록하는 boolean 형 flag 선언 (초기값 false)
- 가장 많이 사용된 알파벳 색인이 포함된 maxIndex 선언
- 가장 많이 사용되는 알파벳 사용 횟수를 포함한 maxValue 선언
- ‘A’~’Z’의 사용 횟수를 인덱스의 0번~26번까지 넣은 alphabetAr 선언
- for 문을 돌리는 동안 alphabetArr의 각 색인 채우기
- for(int i=0; i
alphabetArr(str.charAt(i)-‘A’)++;
}
- alphabetArr을 돌리면서 maxValue와 비교하고,
- alphabetArr – maxValue > 0인 경우 maxValue에 alphabetArr을 재할당
- maxValue가 업데이트되면 플래그는 false로 변경
- alphabetArr – maxValue == 0인 경우 가장 많이 사용되는 알파벳이 여러 개 있으므로 true로 변경
- flag가 true이면 “?”출력
- true가 아닌 경우 (char) (maxIndex + ‘A’) 출력
코드 1
import java.util.*;
import java.io.*;
public class Main{
public static void main(String() args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine().toUpperCase();
boolean flag = false;
int maxValue = 0;
int maxIndex = 0;
int() alphabetArr = new int(26);
for(int i=0; i<str.length(); i++){
alphabetArr(str.charAt(i)-'A')++;
}
for(int i=0; i<26; i++){
int compare = alphabetArr(i)- maxValue;
if(compare > 0){
maxValue = alphabetArr(i);
flag = false;
maxIndex=i;
} else if(compare == 0 ) flag = true;
}
if(flag) System.out.println("?");
else System.out.println((char)(maxIndex+'A'));
}
}
로직 2
로직 1과 다른 부분
- maxIndex 대신 가장 자주 사용되는 알파벳이 포함된 char형 maxChar 선언
- flag 선언 x
- maxValue가 업데이트되면 maxChar에 “?” 할당
- 반환시 (char) (maxIndex + ‘A’) 출력
코드 2
import java.util.*;
import java.io.*;
public class Main{
public static void main(String() args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine().toUpperCase();
int maxValue = 0;
char maxChar = 0;
int() alphabetArr = new int(26);
for(int i=0; i<str.length(); i++){
alphabetArr(str.charAt(i)-'A')++;
}
for(int i=0; i<26; i++){
int compare = alphabetArr(i)- maxValue;
if(compare > 0){
maxValue = alphabetArr(i);
maxChar = (char)('A'+i);
} else if(compare == 0 ) maxChar="?";
}
System.out.println(maxChar);
}
}