문제
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
단어를 입력한 뒤, 가장 많이 사용된 알파벳을 대문자로 출력하는 문제이다. 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력해야하며, 대문자와 소문자를 구분하지 않는다.
입력 출력
Mississipi ?
입력 출력
baaa A
입력 출력
zZa Z
------------------------------------------------------------------------------------------------------------------
풀이
Scanner를 이용하여 단어를 문자열로 입력받은 뒤, 알파벳의 개수만큼의 배열을 생성하였다.
이후, charAt()에 -65를 하여 a는 0번째 인덱스, b는 1번째 인덱스 ..... 이렇게 해당되는 알파벳 배열 위치에 +1씩 되도록 하였다.
max값을 구한 뒤, for문을 한번 더 실행하여 max값과 동일한 값의 인덱스가 존재하는경우 count++, count 개수가 2개 이상인 경우 '?' 를, 아닌 경우에는 알파벳을 출력하게 하였다.
설명이 내가 봐도 이해하기 어려울 것 같아서 아래쪽에 주석을 포함한 코드를 올려놓았다.
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
sc.close();
int len = str.length();
int max = 0, arr_num = 0, count = 0;
char alp_arr[] = new char[26];
for(int i=0;i<len;i++) {
int num = str.charAt(i) - 65;
if(num>=32 && num<=57)
num -= 32;
alp_arr[num] += 1;
}
for(int i=0;i<alp_arr.length;i++) {
if(alp_arr[i]>max) {
max = alp_arr[i];
arr_num = i;
}
}
for(int i=0;i<alp_arr.length;i++) {
if(max == alp_arr[i]) {
count++;
}
}
if(count>=2) {
System.out.println('?');
}else {
System.out.println((char)(arr_num+65));
}
}
}
------------------------------------------------------------------------------------------------------------------
(주석 포함)
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.next(); // 문자열 입력받기
sc.close();
int len = str.length(); // 문자열 개수만큼 char형으로 변경하기 위해서 길이 구하기
int max = 0, arr_num = 0, count = 0; // 반복된 횟수의 최댓값 max, 배열 번호 arr_num, max의 개수를 세기 위한 count 변수 선언
char alp_arr[] = new char[26]; // 알파벳의 개수 26만큼 배열 생성
for(int i=0;i<len;i++) {
int num = str.charAt(i) - 65; // 문자열을 char형으로 바꾼 뒤 -65 (ASCII 코드 65: A ~ 122: z)
if(num>=32 && num<=57) // 소문자로 입력받은 경우에 대문자로 바꿔주기 (ASCII 코드 65:A, 97: a)
num -= 32;
alp_arr[num] += 1; // 해당하는 배열에 +1 ( a는 alp_arr[0], b는 alp_arr[1] ... )
}
for(int i=0;i<alp_arr.length;i++) {
if(alp_arr[i]>max) { // max값 구하기, max값의 배열번호 arr_num에 저장
max = alp_arr[i];
arr_num = i;
}
}
for(int i=0;i<alp_arr.length;i++) {
if(max == alp_arr[i]) { // for문을 한번 더 실행해서 max값과 동일한 값의 인덱스가 존재하는경우 count++
count++;
}
}
if(count>=2) { // count가 2 이상인 경우 ? 출력
System.out.println('?');
}else {
System.out.println((char)(arr_num+65));
}
}
}
'문제 풀이' 카테고리의 다른 글
[백준] 2941번: 크로아티아 알파벳 - JAVA(자바) (0) | 2023.08.10 |
---|---|
[백준] 10988번: 팰린드롬인지 확인하기 - JAVA(자바) (0) | 2023.08.09 |
[백준] 5622번: 다이얼 - JAVA (자바) (0) | 2023.08.06 |
[백준] 2444번: 별 찍기 - 7 - JAVA (자바) (0) | 2023.08.06 |
[백준] 11718번: 그대로 출력하기 - JAVA (자바) (0) | 2023.08.06 |