
내가 생각했을때 문제에서 원하는부분
입력은 몇 개의 줄들로 이루어진다.
각 줄에는 하나의 소문자와 영어 문장이 공백으로 구분되어 주어진다.
각 문장은 길이가 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();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.