백준 도비의 영어 공부

KIMYEONGJUN·2024년 10월 26일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

입력은 몇 개의 줄들로 이루어진다.
각 줄에는 하나의 소문자와 영어 문장이 공백으로 구분되어 주어진다.
각 문장은 길이가 1에서 250이며 입력의 마지막은 #이다.

출력의 각 줄은 입력으로 주어진 소문자와 그 소문자 알파벳이 나타난 횟수로 이루어진다.
이때 문장에서 해당 알파벳이 소문자로 나타나던 대문자로 나타나던 모두 세야 한다.

내가 이 문제를 보고 생각해본 부분

무한 루프를 사용하여 여러 줄의 입력을 계속 받는다.
입력이 #일 경우 루프를 종료하는 조건을 설정하여,
이 특수한 입력이 들어오면 프로그램이 종료되도록 한다.
입력 문자열을 공백으로 분리하여 첫 번째 부분을 소문자로,
두 번째 부분을 문장으로 저장합니다.
여기서 split(" ", 2)를 사용하여 공백으로 나누되 최대 두 개의 부분만 분리하도록 하여 문장의 내용이 공백을 포함하더라도 문제 없이 처리할 수 있게 했다.
문장의 각 문자를 반복하며 주어진 소문자와 같은지 비교한다.
이때 대소문자 구분 없이 비교하기 위해 Character.toLowerCase() 메서드를 사용했다.
이렇게 함으로써 'a'와 'A'를 동일하게 처리할 수 있다.
최종적으로 주어진 소문자와 그 소문자가 문장에서 몇 번 등장했는지를 출력한다.

코드로 구현

package baekjoon.baekjoon_23;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 2386번 문제
public class Main818 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        while(true) {
            String input = br.readLine();
            if(input.equals("#")) {
                break; // 입력이 '#'이면 종료
            }

            // 입력을 공백으로 분리
            String[] parts = input.split(" ", 2);
            char targetChar = parts[0].charAt(0); // 소문자
            String sentence = parts[1]; // 문장

            // 대소문자 구분 없이 등장 횟수 세기
            int count = 0;
            for(char c : sentence.toCharArray()) {
                if(Character.toLowerCase(c) == Character.toLowerCase(targetChar)) {
                    count++;
                }
            }

            // 결과 출력
            System.out.println(targetChar + " " + count);
        }
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글