Notice
Recent Posts
Link
- Today
- Total
hye-log
[백준]1157번 단어 공부(JAVA) 본문
0. 문제 링크
https://www.acmicpc.net/problem/1157
1. 문제 설명
1) 주어진 문자열에서 가장 많이 사용된 알파벳을 대문자로 출력하기
2. 입출력
// input1
Mississipi
// output1
?
// input2
zZa
// output2
2
3. 코드
import java.util.*;
public class b1157 {
public static void main(String[] args) {
int[] alphabet = new int[26]; // 알파벳 계수기
int max = -1; // 최대값 찾기
int maxIdx = -1; // 최대값의 인덱스
char ans = ' '; // 가장 많이 사용된 알파벳
// 1. 입력
Scanner sc = new Scanner(System.in);
String str = sc.next();
// 2. 문자열에서 한 글자씩 개수 세기
str = str.toUpperCase(); // 대문자로 변경
for (int i = 0; i < str.length(); i++) { // 입력된 문자열의 개수만큼 반복
alphabet[str.charAt(i) - 'A']++; // 아스키 코드 활용
}
// 3. 가장 많이 사용된 알파벳 찾기
for (int i = 0; i < alphabet.length; i++) { // 알파벳 개수만큼 반복
if(max < alphabet[i]) { // 최대값을 찾았다면
max = alphabet[i]; // 최대값을 max에 저장
maxIdx = i; // 최대값의 인덱스를 maxIdx에 저장
} else if (max == alphabet[i]) { // 현재 최대값과 같다면
maxIdx = -1; // -1을 maxIdx에 저장
}
}
// 4. 정답 출력
if(maxIdx == -1) { // maxIdx가 -1이라면
ans = '?'; // 가장 많이 사용된 알파벳이 여러 개 존재하므로 ? 출력
} else { // 최대값이 정상적으로 들어가 있다면
ans = (char) ('A' + maxIdx); // 'A'에서 maxIdx만큼 더한 char 문자를 출력
}
System.out.println(ans);
}
}
실행 결과
4. 회고
1) 입력 받은 문자열을 toUpperCase()로 대문자로 변경한 뒤 한 글자씩 알파벳의 개수를 셈
2) max 변수를 활용하여 가장 많이 사용된 알파벳을 찾고, 중복되는 경우 -1을 maxIdx에 저장함
5. Github
https://github.com/iihye/Algorithm/blob/main/Baekjoon/b1157.java
728x90
'CodingTest > Baekjoon' 카테고리의 다른 글
[백준]2675번 문자열 반복(JAVA) (0) | 2023.08.13 |
---|---|
[백준]2439번 별 찍기 - 2(JAVA) (0) | 2023.08.13 |
[백준]1152번 단어의 개수(JAVA) (0) | 2023.08.12 |
[백준]12100번 2048 (Easy)(JAVA) (0) | 2023.08.11 |
[백준]16935 배열 돌리기3(JAVA) (0) | 2023.08.10 |
Comments