배움과 기록의 장
[백준] 1157번: 단어 공부 (Java) 본문
✅ 문제
https://www.acmicpc.net/problem/1157
✅ 풀이
- 입력은 대소문자로 된 단어로 받고, 출력은 대문자로 하기때문에 우선 입력받은 단어를 대문자로 바꿔준다. 이때 사용해준 메서드는 문자열.toUpperCase() 이다.
- 그 다음은 가장 많이 사용된 알파벳을 알기 위해 단어에 사용된 A~Z의 갯수를 알아야한다. 사용된 A~Z의 갯수를 담을, 크기 26 초기값이 0인 int 배열(alphabet)을 선언해준다.
- 단어를 순회하며 사용된 알파벳에 해당하는 배열의 요소에 +1을 해줄 것이다. 사용된 알파벳에 해당하는 배열의 인덱스를 찾을 때, 아스키코드를 사용해줄 것이다.
- 우리가 만든 배열(alphabet)은 0~25의 인덱스를 가진다. 표를 보면 A~Z가 65~90에 해당한다는 것을 알 수 있다.
따라서, 우리가 만든 배열에서 각 알파벳(A~Z)의 인덱스 값은, '알파벳'-65를 해서 치환해주면 된다. - 사용된 A~Z의 갯수를 모두 구했다면, 갯수를 담은 배열(alphabet)을 순회하며 최댓값(max)과 그 최댓값을 가진 인덱스(maxIdx)를 구해준다.
- 이후에 또 한번 갯수를 담은 배열(alphabet)을 순회하며 최댓값이 여러개 존재하는지 확인한다.
여러개 존재한다면 '?'를 출력, 유일하다면 '(char) (maxIdx+65)'을 해주어 가장 많이 사용된 알파벳을 출력한다.
✅ 코드
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//대문자로 입력받기
String line = sc.nextLine().toUpperCase();
int[] alphabet = new int[26];
//알파벳 배열에 횟수만큼 넣어주기
for(int i = 0; i < line.length(); i++){
alphabet[line.charAt(i)-65] += 1;
}
//max와 maxIdx 찾기
int max = 0;
int maxIdx = 0;
for(int i = 0; i < alphabet.length; i++){
if(alphabet[i] > max){
max = alphabet[i];
maxIdx = i;
}
}
//max가 여러개 존재하는지 아닌지 판별하기
int count = 0;
boolean check = true;
for(int i = 0; i < alphabet.length; i++){
if(alphabet[i] == max){
count ++;
if(count >= 2) {
System.out.print("?");
check = false;
break;
}
}
}
if (check) System.out.print((char) (maxIdx+65));
}
}
반응형
'problem solving' 카테고리의 다른 글
[백준] 1316번: 그룹 단어 체커 (Java) (0) | 2023.03.09 |
---|---|
[백준] 2941번: 크로아티아 알파벳 (Java) (0) | 2023.03.09 |
[백준] 10988번: 팰린드롬인지 확인하기 (Java) (0) | 2023.03.09 |
[백준] 10812번: 바구니 순서 바꾸기 (Java) (0) | 2023.03.09 |
[백준] 11718번: 그대로 출력하기 (Java) (0) | 2023.03.01 |