문제 url:
단어 공부
문제:
1. BufferedReader를 이용해 단어를 입력받을 수 있도록 한다.
2. 알파뱃 26개 배열을 생성해서 이 배열을 이용해 해당 알파뱃 등장시 해당 인덱스 값을 증가시킨다
3. max 변수와 출력할 문자형을 정의한다.
4. 단어를 입력 받는다.
5. 단어의 길이만큼 반복해 개수를 카운트함과 동시에
max값과 문자형을 max값에 해당하는 문자형으로 초기화
6. 출력
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//분석: 단어를 입력받으면 해당 알파뱃이 몇번 나오는지 파악하는데, 이를 알파벳 26개 배열안에서 ++해주는 방식으로 접근
//알파뱃 26개의 공간을 담을 배열 생성 (숫자가 들어가니 int 타입 설정)
int[] count_arr = new int[26];
// 단어 입력
String word = br.readLine().toUpperCase();
// 가장 큰값을 넣기 위함이며 -1을 한 이유는 나올 수 없는 값이므로 대입
int max = -1;
char ch = '?';
// 단어 하나하나를 대조하며 개수를 더해가기 위한 반복문
for (int i = 0; i < word.length(); i++) {
//toUppercase를 통해 전부 대문자로 진행하므로 -'A'로 진행
count_arr[word.charAt(i) - 'A']++;
// 만약 해당 인덱스 수가 max보다 크다면 맥스를 초기화 및 문자형도
// 해당 문자형으로 초기화
if (count_arr[word.charAt(i) - 'A'] > max) {
max = count_arr[word.charAt(i) - 'A'];
ch = word.charAt(i);
// 현재 최대값과 현재 인덱스 값이 같다 = 최대값이 여러개다.
// 그래서 현재 문자형을 ?로 초기화
} else if (count_arr[word.charAt(i)- 'A'] == max) {
ch = '?';
}
}
System.out.println(ch);
}
}
코드안에 이번에 해석을 진행하면서 따로 해석 part를 마련하지 않았다..
이런 귀찮이즘 줄이도록 하겠습니다..
처음에는 아주 슈퍼 하드 코딩식으로 짯다.
for(int i = 0; i< word.length(); i++) {
for(int j = 1; j< word.length(); j++) {
if (word.charAt(i) == word.charAt(j)) {
count++;
}
}
}
이전 코드를 삭제하면서.. 기억나는대로 대충 복구한 예시입니다
이런 방법으로 만약 Happy를 입력한다면, H를 가지고 appy를 검사해서 개수를 세는 방법으로 진행하니 솔직히 잘 돌아가지 않았다. 그래서 블로그를 참고하면서 해당 방법을 배워볼 수 있었고, 하드하게 코드를 짜면서 (물론 돌아갈 수도 있다.) 오류를 범하거나 본인이 짠 코드를 해석하지 못할 수 있는 경험을 할 수 있었다.
배운점 정리:
큰 틀을 먼저 생각한 후, 해당 로직을 진행할 떄 도울 수 있는 ex) 알파뱃 26개 배열 부분을 정의해서 좀 더 영리하게 풀 수 있도록 진행해보자.