| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- html
- 자바 백준 단어공부
- 지도 구현
- 자바 백준 1157
- 한수구하기
- 백준 1157
- java
- 투패스 어셈블러
- 어셈블러
- 자바 미니프로젝트
- 자바 백준
- 자바 성적산출프로그램
- 백준 1236번
- 자바 백준 1236번
- 백준 9012
- java 백준
- 자바 한수
- 자바 백준 2751
- SVM어셈블러
- javascript
- 백준 1065번
- SVM 투패스 어셈블러
- 카카오 맵 api
- 백준 2751 자바
- 백준 2751
- CSS
- java 성적산출프로그램
- 자바 백준 9012
- 백준 한수
- 자바
- Today
- Total
Sunny's Coding Diary
자바[JAVA] - 백준 1157번 단어공부 본문
이번에 풀어본 문제는 백준 1157번 단어공부이다.

[문제]
알파벳을 대소문자로 입력했을 때 가장 많이 사용된 알파벳을 찾는 문제이다. 입력을 할 때만 대소문자를 구분해서 입력하지만 출력할 때는 해당 문자를 대문자로 출력하는 문제이다. 단, 많이 사용된 알파벳이 여러 개 존재한다면?를 출력한다.
문제의 난이도는 어렵지 않지만 아스키코드로 변환해주는 부분이 헷갈릴 수도 있다.
간단하게 해석하자면 한 단어를 입력받고 그 단어에 대해서 가장 많이 사용된 알파벳을 구하는 문제이다.
소스코드는 다음과 같다.
[소스코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class M1157 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String n = bf.readLine().toUpperCase();
String[] alpha = n.split("");
int[] count = new int[26];
int resultcount = 0, result = 0, check = 0;
String resultString= "";
for(int i = 0;i < alpha.length;i++) {
char al = alpha[i].charAt(0);
count[(int) al - 65]++;
}
for(int i = 0;i < count.length;i++) {
if(count[i] > resultcount) {
resultcount = count[i];
result = i;
}
}
for(int i = 0;i < count.length;i++) {
if(count[i] == resultcount)
check++;
}
if(check > 1) resultString = "?";
if(resultString.equals("?")) System.out.print(resultString);
else System.out.print((char) (result + 65));
}
}
[해석]
1. 단어를 입력받는다. 입력받는 과정에서 문자를 대문자로 통일해준다.
2. 대문자로 통일해 준 단어를 한 글자씩 나누어서 alpha 배열에 넣어준다.
3. 나누어준 alpha배열에 문자를 char형으로 바꿔주고 아스키코드를 이용하여 0번 인덱스부터 알파벳 'A'가 들어갈 수 있게 아스키코드에서 65('A')를 빼준 값을 배열의 인덱스로 지정해 주고 해당 인덱스를 1 늘려준다.
(그전에 알파벳은 26개이므로 알파벳의 개수를 구해주는 count 배열의 크기를 26으로 지정해 준다.)
4. 알파벳들의 개수를 구했다면 다음으로 resultcount변수를 이용하여 가장 많이 사용된 알파벳을 구해준다.
그리고 해당 인덱스를 result변수에 넣어준다.
5. 4번의 과정을 통해 알파벳을 구했다면 다음으로 동일하게 많이 사용된 알파벳이 있는지 확인해 준다.
이때 check변수를 활용하여 카운트해주는데 check가 1보다 큰 경우는 가장 많이 사용된 알파벳이 여러 개 존재하는 경우이다. (여기서 check가 1인 경우는 자기 자신을 나타낸다.)
6. 5번의 과정에서 여러 개의 알파벳을 구했으면 조건식을 통해 ?를 설정해 주고 resultString변수에 넣어준다.
7. resultString변수가 ?이면 resultString을 출력해 주고 그렇지 않으면 4번 과정에서 구했던 인덱스 번호를 아스키코드로 변환해서 출력해 준다. (ex - result가 0이라면 65를 더해서 아스키코드로 바꿔주면 'A')
[해결]

문제 자체의 난이도는 어렵지 않지만 생각해야 하는 경우의 수들이 조금? 있기 때문에 헷갈릴 수 있는 문제이다.
[꿈은 크게 가져라, 부서져도 그 조각이 크게]
'JAVA' 카테고리의 다른 글
| 자바[JAVA] - 백준 9012번 괄호 (0) | 2023.10.19 |
|---|---|
| 자바[JAVA] - 백준 2751번 수 정렬하기 (0) | 2023.02.26 |
| 자바[JAVA] - 백준 1065번 한수 (2) | 2023.02.04 |
| 자바[JAVA] - 백준 1236번 성지키기 (1) | 2023.02.01 |
| 자바[JAVA] - 성적산출프로그램(최종) (0) | 2023.01.13 |