
내가 생각했을때 문제에서 원하는부분
The input consists of a single line, starting in column 1, not exceeding column 70, and containing only the lowercase letters (at least one letter).
The output consists of a single integer: print 0 (zero) if the string is even, 1 (one) if the string is odd, or 2 if the string is not even and is not odd (i.e., it is neither).
내가 이 문제를 보고 생각해본 부분
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));는 표준 입력으로부터 데이터를 효율적으로 읽기 위해 생성한 객체이다.
즉, 사용자로부터 문자열을 한 줄 입력받기 위한 준비이다.
그리고 String input = br.readLine();에서는 실제 한 줄의 문자열을 입력받아 input 변수에 저장한다.
다음으로, int[] freq = new int[26];는 알파벳 소문자 'a'부터 'z'까지 총 26글자의 등장 빈도를 저장하기 위한 배열이다.
이 배열의 각 인덱스는 해당 문자의 등장 횟수를 저장한다.
for (char ch : input.toCharArray()) { freq[ch - 'a']++; }는 입력된 문자열을 문자 하나씩 순회하며, 각 문자의 아스키값을 활용해 맞는 인덱스를 찾아 해당 문자의 등장 횟수를 1씩 증가시키는 부분이다.
이후, 문자열이 “모든 글자의 출현 횟수가 짝수”인지 혹은 “모든 글자의 출현 횟수가 홀수”인지를 판단하기 위해 boolean allEven = true;와 boolean allOdd = true;라는 두 개의 플래그 변수를 선언한다.
allEven은 모든 문자 등장 횟수가 짝수일 때만 true 상태를 유지하며, allOdd는 모든 문자 등장 횟수가 홀수일 때만 true로 유지된다.
for (int count : freq) { ... } 부분에서는 각 문자 등장 횟수를 순회하면서 판단한다.
만약 등장 횟수가 0이면 그 문자는 문자열에 나타나지 않았으므로 건너뛴다.
등장 횟수가 짝수라면, 모든 문자가 홀수여야 한다는 조건은 깨지기 때문에 allOdd를 false로 바꾼다.
등장 횟수가 홀수라면, 모든 문자가 짝수여야 한다는 조건이 깨져서 allEven을 false로 바꾼다.
이 과정을 통해 문자열이 모두 짝수 등장인지, 모두 홀수 등장인지, 아니면 혼합인지 여부를 판별한다.
마지막으로 조건에 따라 출력한다.
allEven이 true이면 모든 문자가 짝수 횟수로 등장한 것이므로 출력은 0이다.
allOdd가 true이면 모든 문자가 홀수 횟수로 등장한 것이므로 출력은 1이다.
둘 다 false면 혼합된 경우이므로 2를 출력한다.
마지막으로 br.close();를 호출하여 입출력 객체를 닫아 자원을 해제한다.
코드로 구현
package baekjoon.baekjoon_32;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 25870번 문제
public class Main1286 {
public static void main(String[] args) throws IOException {
// 표준 입력(System.in)으로부터 데이터를 읽기 위한 BufferedReader 객체 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 입력 문자열 한 줄을 읽음
String input = br.readLine();
// 알파벳 소문자 각각의 등장 횟수를 저장할 배열 (a~z 총 26개)
int[] freq = new int[26];
// 입력 문자열의 각 문자에 대해 등장 횟수 증가
for (char ch : input.toCharArray()) {
freq[ch - 'a']++;
}
// 모든 문자가 짝수 번 등장하는지 여부를 저장하는 플래그
boolean allEven = true;
// 모든 문자가 홀수 번 등장하는지 여부를 저장하는 플래그
boolean allOdd = true;
// 각 문자의 등장 횟수를 확인하여 플래그 업데이트
for (int count : freq) {
if (count == 0) continue; // 등장하지 않은 문자는 검사 대상에서 제외
if (count % 2 == 0) {
// 짝수 횟수면 홀수 플래그를 false로 변경
allOdd = false;
} else {
// 홀수 횟수면 짝수 플래그를 false로 변경
allEven = false;
}
}
// 모든 문자가 짝수 번 등장하는 경우 0 출력
if (allEven) {
System.out.println(0);
// 모든 문자가 홀수 번 등장하는 경우 1 출력
} else if (allOdd) {
System.out.println(1);
// 그 외 경우(혼재)는 2 출력
} else {
System.out.println(2);
}
// BufferedReader 자원 해제
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.