View
https://www.acmicpc.net/problem/1157
📚 문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
예제 입력 | 예제 출력 |
Mississipi | ? |
baaa | A |
💻 코드
- 내 소스
import java.util.Scanner;
public class Main{
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
String str=sc.next();
char[] crr=str.toCharArray();
char[] alpha= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char[] Alpha= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int [] num=new int[alpha.length];
for(int i=0;i<alpha.length;i++) {
num[i]=0;
}
for(int i=0;i<crr.length;i++) {
for(int j=0;j<alpha.length;j++) {
if(crr[i]==alpha[j]) {
num[j]+=1;
break;
}
if(crr[i]==Alpha[j]) {
num[j]+=1;
break;
}
}
}
int max=0;
boolean check=false;
for(int i=1;i<alpha.length;i++) {
if(num[i]>num[max]) {
max=i;
}
else if(num[i]==num[max]) {
check=true;
}
}
if(check==true) {
System.out.println("?");
}else {
System.out.println(Alpha[max]);
}
}
}
- 풀이
package part1;
import java.util.Scanner;
public class BaekJoon{
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int[] cnt=new int[26]; //알파벳 카운트를 저장할 int 배열
int max=0; //가장 많이 나온 알파벳 수를 저장할 변수
char answer = '?'; // 정답을 저장하는 변수
String word=sc.next().toUpperCase(); //단어를 입력받고, 모든 문자를 대문자로 바꾼다.
for(int i=0;i<word.length();i++){ //문자열 길이만큼 반복
cnt[word.charAt(i)-65]++; //현재 알파벳을 알파벳카운트 배열 index에 +1한다.
if(max<cnt[word.charAt(i)-65]) { //현재 알파벳 수가 max보다 크다면
answer=word.charAt(i); //정답에 현재 알파벳을 할당
max=cnt[word.charAt(i)-65]; //max 변수에 현재 알파벳 수를 저장
}
else if(max==cnt[word.charAt(i)-65]) //만약 현재 알파벳 수가 max와 같다면
answer='?'; //정답에 '?'를 할당.
}
System.out.println(answer);
}
}
'A'-65 = 0
'B'-65 = 1 을 이용하면 알파벳 순서대로 수열에 저장할 수 있다
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[기본 수학1] 백준 1712번 손익분기점(Java) (0) | 2020.02.19 |
---|---|
[문자열] 백준 11720번 숫자의 합(Java) (0) | 2020.02.18 |
[문자열] 백준 11654번 아스키 코드(Java) (0) | 2020.02.17 |
reply