백준

백준 1157번 '단어 공부' (JAVA 11)

ho코딩 2024. 1. 3. 12:19

백준 1157번 문제인 '단어 공부' 문제입니다. 

'알파벳 대소문자로 된 단어를 입력받고,

입력한 단어에 사용된 알파벳 중 대소문자 관계없이 가장 많이 사용된 알파벳을 찾아 대문자로 출력하는 문제입니다. 

 

정답 예제 코드

 

문제를 풀기에 앞서, 풀이 과정을 대략적으로 생각해봅니다.

 

 

먼저 대소문자와 관계없이,  사용된 알파벳을 카운트 해야하는 문제이므로, 입력받은 모든 문자열을 대문자 또는 소문자로 

변환하는 과정이 필요합니다. 대문자 또는 소문자로 변환한 후,  문자열을 순회하며 사용된 알파벳의 개수를 배열에 저장하고 가장 많이 카운트된 알파벳을 대문자로 출력합니다.  만약 가장 많이 카운트도니 알파벳이 2개 이상이라면 문자열 '?'을 출력합니다.

 

이제 자세한 과정으로 들어가보겠습니다. 


import java.util.Scanner;

public class Main {
  public static void main(String args[]) {
    Scanner scan = new Scanner(System.in);
    String word = scan.nextLine().toUpperCase();
    char result = '?';

    int[] array = new int[26];
    int max = 0;

    for (int i = 0; i < word.length(); i++) {
      array[word.charAt(i) - 65]++;
      if (max < array[word.charAt(i)-65]) {
        max = array[word.charAt(i)-65];
        result=word.charAt(i);
      } else if (max == array[word.charAt(i)-65]) {
        result='?';
      }
    }

    System.out.println(result);
  }
}

 

 

먼저 Scanner 클래스를 사용하여 입력을 받는 scan 객체를 생성합니다.  

이후 'word'변수에 입력받은 문자열을 저장하고, 저장한 문자열을 대문자로 변환하는 .isUpperCase를 사용합니다. 

그리고 결과물을 출력할 변수인 result 변수에 초기값으로 '?'를 설정합니다

Scanner scan = new Scanner(System.in);
    String word = scan.nextLine().toUpperCase();
    char result = '?';

 

다음으로 입력받은 문자열에 사용된 알파벳을 담고 카운트할 배열 'array'를 생성합니다.

배열의 크기는 알파벳의 개수인 26개로 설정했습니다. 

또한 가장 많이 사용된 알파벳의 사용횟수를 담을 변수인 max를 생성합니다

int[] array = new int[26];
max = 0;

 

 

입력받는 코드와 변수, 배열등을 모두 설정했으므로 문자열을 순회하며 카운트하는 코드를 작성합니다.

for문을 활용하여 문자열을 순회하도록 하였고,  array[word.charAt(i) - 65]++; 를 사용하여 문자열 사용횟수를 카운트합니다. 

charAt(i)는 i번째에 있는 문자열을 특정하는 함수입니다.
65를 빼주는 이유는 대문자 A는 ASCII코드에서 65번이고, Z까지 1씩 증가하여 A=65 ,B=66 ~~~의 구조를 가집니다.
때문에 만약 A가 나타난 경우 -65를 해준다면 값은 0이 되고, 0번 인덱스를 1 증가해주는 역할을 합니다.

 

그리고 만약 기존의 max값보다 증가시킨 배열의 인덱스의 값이 더 크다면 max값을 교체해주고, 

result 역시 교체된 인덱스의 값으로 바꿔줍니다

만약 max값이 같다면 result에 '?' 문자열을 배치시킵니다. 

  for (int i = 0; i < word.length(); i++) {
      array[word.charAt(i) - 65]++;
      if (max < array[word.charAt(i)-65]) {
        max = array[word.charAt(i)-65];
        result=word.charAt(i);
      } else if (max == array[word.charAt(i)-65]) {
        result='?';
      }
    }

 

이렇게 문자열을 모두 순회하였다면 결과값 출력을 위해 sout(result)를 해줍니다.

 System.out.println(result);

'백준' 카테고리의 다른 글

백준 2741번 'N 찍기' (JAVA 11)  (0) 2024.01.07
백준 2739번 '구구단' (JAVA 11)  (0) 2024.01.03
백준 1152번 '단어의 개수' (JAVA 11)  (0) 2024.01.03
백준 1008번 A/B (JAVA11)  (2) 2024.01.03
백준 1000번(A+B) (JAVA 11)  (1) 2024.01.03