반응형
해당 문제는 문자의 코드값을 다루는 문제이다 아스키코드를 알고 있다면 문제는 쉬워질 것이다.
아스키코드의 대문자 A는 65 소문자 a는 97부터 시작한다.
[풀이방법]
1. Scanner를 이용하여 단어를 word 변수에 받는다.
2. 알파벳의 길이는 26개 배열 arr[26]을 생성해준다.
3. for문을 통해 단어의 각 알파벳을 비교해준다. 단어의 길이만큼 반복한다(word.length).
4. 문제의 핵심은 대문자 소문자 구별 없이 가장 많이 있는 알파벳을 구해야 한다.
- for문안에 if문을 통해 대문자와 소문자를 구별해서 계산해준다.
- if문 조건식에 단어의 각 알파벳이 65~90 사이일 경우 (대문자) , 그 이외에는 else (소문자)로 구별하여 if문을 나눠준다.
- 대문자일 경우 해당 알파벳의 -65를 한 후 그 숫자의 배열을 ++ 해준다.
- 소문자일 경우 해당 알파벳의 -97을 한 후 그 숫자의 배열을 ++ 해준다.
for (int i = 0; i<word.length(); i++){ //대문자 if (word.charAt(i)>= 65 && word.charAt(i) <= 90){ arr[word.charAt(i) - 65]++; } else { //소문자 arr[word.charAt(i) - 97] ++; } }
5. 이제 가장많이 사용된 단어를 대문자로 나타내줘야한다. + 가장 많은 숫자가 하나가 아닐경우 ?를 출력해야한다.
- char no의 기본값을 ?로 설정 int max값을 -1로 설정해준다. (기본배열값이 0으로 되어있기 때문에 아무것도 없을때 ?가 나오지 않게 하기위해 max를 -1로 설정했다.)
char no = '?'; int max = -1;
- for문을 통해 알파벳의 길이만큼 반복하면서 값을 비교할 것이다.
- for문안에 if문 조건식을 각 arr의 [i] 값이 max값보다 클 경우 max값을 해당 arr [i] 값으로 저장, no값은 i값에 +65를 해서 대문자 알파벳 값으로 지정한다. (char 형 타입의 변수에 int와 char을 연산하여 저장할 경우 반드시 캐스팅해준다.)
for (int i = 0; i<26; i++){
if (arr[i]>max) {
max = arr[i];
no = (char) (i+65); //대문자로 나타내기 위해 해당 알파벳 위치로
//char 형 타입의 변수에 int 와 char 을 연산하여 저장할 경우 반드시 캐스팅해주기(char)
}
- 이후 else if문으로 max값의 크기가 같을경우 ? no값을 ? 로 설정한 후 for문을 나가 no를 출력한다.
else if (arr[i]==max){
no = '?';
}
전체코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String word = sc.next();
sc.close();
int[] arr = new int[26]; //알바벳 길이 26 개
for (int i = 0; i<word.length(); i++){ //대문자
if (word.charAt(i)>= 65 && word.charAt(i) <= 90){
arr[word.charAt(i) - 65]++;
} else { //소문자
arr[word.charAt(i) - 97] ++;
}
}
char no = '?';
int max = -1; //기본배열값이 0으로 되어있기 때문에 아무것도 없을때 ?가 나오지 않게 하기위해 -1로 설정
for (int i = 0; i<26; i++){
if (arr[i]>max) {
max = arr[i];
no = (char) (i+65); //대문자로 나타내기 위해 해당 알파벳 위치로
//char 형 타입의 변수에 int 와 char 을 연산하여 저장할 경우 반드시 캐스팅해주기(char)
} else if (arr[i]==max){
no = '?';
}
}
System.out.println(no);
}
}
반응형
'알고리즘 > 백준(BAEKJOON)' 카테고리의 다른 글
백준 1차원배열/4344 자바/평균은 넘겠지 (0) | 2021.09.29 |
---|---|
[1152 자바] 단어의 개수/백준 (0) | 2021.09.24 |
[10809 자바] 알파벳 찾기 [백준] (0) | 2021.09.16 |
백준 /11720 자바/숫자의 합 (0) | 2021.09.15 |
4673 셀프넘버 JAVA 백준 문제풀이 (0) | 2021.09.13 |