Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- K디지털크레딧
- 불끌때
- 독서감상문
- fifaonline4
- 내일배움카드
- 바이트디그리
- 부의감각
- 안드로이드#앱만들기#알바
- 강아지 스마트 펜스
- 스쿼드 메이커
- 안드로이드 #앱개발#계산기
- 박스#강아지집#만들기
- fifaonline
- 부르지마세요
- 아두이노#작품#사료급식기
- Ai
- 자바 인강
- 랜덤스쿼드
- 안녕 디지몬
- 혼술 술자리 인싸앱
- 홈CCTV
- 강아지 #박스집 #복층
- D-ID
- 랜덤
- 피온4
- #FIFAONLINE4
- 패스트캠퍼스
- 안드로이드
- Java & SpringBoot로 시작하는 웹 프로그래밍
- 안드로이드 그림판#그림메모장#낙서장
Archives
- Today
- Total
LC Studio
백준 1157 단어공부 (Java) 본문
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
3가지 포인트를 생각하고 풀었다.
1. 대문자 소문자 처리 -> ascill코드를 활용
2. 가장많은 숫자 처리 -> 알파뱃 배열을 만들어 입력값을 나눠저장 후 배열 내 비교
3. 가장많은 수 중복처리 -> swich 문을 활용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
int[] array = new int[26]; //a~z까의 알파벳 배열생성
int Max = 0; //가장 많이 나온 알파뱃 개수저장
int Sum = 0; //알파뱃 개수 중복 체크
int Address = 0; //가장 많이 나온 알파뱃 주소
for(int i=0;i<N.length();i++){ //입력받은 문자열의 길이만큼 for문을 돌려준다
for(int j=65;j<91;j++){ //알파벳이 대문자일 경우
if(N.charAt(i) == (char)j){ //알파벳이 같다면
array[j-65] = array[j-65]+1; //해당 array에 1을 더해준다
}
}
for(int j=97;j<123;j++){ //알파벳이 소문자일 경우
if(N.charAt(i) == (char)j){ //알파벳이 같다면
array[j-97] = array[j-97]+1; //해당 array에 1을 더해준다
}
}
}
for(int i=0;i<26;i++){ //가장 많이 나온 알파뱃 주소를 알아낸다
if(array[i] > Max){
Max = array[i];
Address = i; //array의 주소를 저장한다
}
}
for(int i=0;i<26;i++){ //가장 많이 나온 알파뱃의 개수가 중복되는지 체크한다
if(array[i] == Max){
Sum = Sum + 1;
}
}
switch (Sum) {
case 1: //Sum이 1이어서 알파뱃의 개수가 중복되지 않는다면,
System.out.println((char)(65+Address)); //(char)65 = 'A' 에서 몇번이나 증가해야 하는지(Address) 계산하여 출력해준다
break;
default:
System.out.println("?"); //Sum이 하나이상(가장 많이 나온 알파뱃의 개수가 중복) 나왓다면 '?'출력
break;
}
}
}
주석을 읽어보면 어느정도 이해가 될 것이다.
코드가 복잡하긴 하지만 스스로 생각하고 방향을 잡아 풀어내어 뿌듯하다.
반응형
'Java > 백준 알고리즘' 카테고리의 다른 글
백준 2941 크로아티아 알파벳 (Java) (0) | 2022.03.18 |
---|---|
백준 2908번 상수 (JAVA) (0) | 2022.03.17 |
백준 1065 한수 (JAVA) (0) | 2022.03.16 |
백준 4673 셀프 넘버 JAVA (0) | 2022.03.15 |
백준 4344 평균은 넘겠지 (Java) (0) | 2022.03.15 |