
내가 생각했을때 문제에서 원하는부분
첫 번째 줄에 문자열 A가 주어진다.
두 번째 줄에 전화번호 B가 주어진다.
문자열 A에 포함된 전화번호 중에서 전화번호 B와 다르면서 B를 접두사로 갖는 전화번호의 개수를 출력한다.
내가 이 문제를 보고 생각해본 부분
입력값 읽기:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));는 키보드와 같은 표준 입력(System.in)으로부터 데이터를 읽어오기 위한 BufferedReader 객체를 생성하는 부분이다.
String A = br.readLine();은 첫 번째 줄에 입력된 문자열(여러 전화번호가 공백으로 구분된)을 읽어서 A 변수에 저장한다.
String B = br.readLine();은 두 번째 줄에 입력된 문자열(기준이 되는 단일 전화번호)을 읽어서 B 변수에 저장한다.
전화번호 분리 및 카운터 초기화:
String[] phoneNumbers = A.split(" ");는 문자열 A를 공백(" ")을 기준으로 나누어(split) 각 전화번호를 별개의 문자열로 만들어 phoneNumbers라는 배열에 저장한다.
예를 들어 A가 "12 121 123"이라면, phoneNumbers 배열은 ["12", "121", "123"]이 된다.
int count = 0;는 조건을 만족하는 전화번호의 개수를 세기 위한 변수를 선언하고 0으로 초기화한다.
전화번호 순회 및 조건 확인:
이 for 루프는 phoneNumbers 배열에 있는 모든 전화번호를 하나씩 가져와 number 변수에 할당하며 반복한다.
즉, 각 전화번호에 대해 동일한 검사를 수행하게 된다.
if (!number.equals(B) && number.startsWith(B))가 핵심 조건문이다.
!number.equals(B): 현재 확인하고 있는 전화번호(number)가 기준 전화번호(B)와 같지 않다는 조건이다.
equals()는 문자열 내용을 비교하며, 앞에 !가 붙어 "같지 않으면 참"이 된다.
문제에서 "B와 다르면서"라는 조건을 충족한다.
number.startsWith(B): 현재 전화번호(number)가 기준 전화번호(B)로 시작하는지를 확인하는 조건이다.
이는 B가 number의 접두사인지 확인하는 것이며, 문제에서 "B를 접두사로 갖는" 조건을 충족한다.
&&: 두 조건(!number.equals(B)와 number.startsWith(B))이 모두 참(true)일 경우에만 if 문 내부의 코드를 실행하라는 의미이다.
count++;: 위 두 가지 조건을 모두 만족하는 전화번호를 발견하면, count 변수의 값을 1 증가시킨다.
결과 출력 및 자원 해제:
모든 전화번호를 확인하고 난 뒤, System.out.println(count);를 통해 최종적으로 count에 저장된, 조건을 만족하는 전화번호의 개수를 화면에 출력한다.
br.close();는 BufferedReader 사용이 끝났으므로 시스템 자원을 올바르게 해제하는 것이다.
코드로 구현
package baekjoon.baekjoon_32;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 26041번 문제
public class Main1260 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 첫 번째 줄에 문자열 A (공백으로 구분된 전화번호들)를 읽습니다.
// N을 별도로 입력받는 줄이 없으므로, 해당 부분은 삭제했습니다.
String A = br.readLine();
// 두 번째 줄에 전화번호 B (기준 전화번호)를 읽습니다.
String B = br.readLine();
// 문자열 A를 공백을 기준으로 분리하여 개별 전화번호들을 배열에 저장합니다.
String[] phoneNumbers = A.split(" ");
int count = 0; // 조건을 만족하는 전화번호의 개수를 저장할 변수입니다.
// 모든 전화번호를 순회하며 조건을 확인합니다.
for (String number : phoneNumbers) {
// 1. 현재 전화번호(number)가 기준 전화번호(B)와 다른지 확인합니다.
// 2. 현재 전화번호(number)가 기준 전화번호(B)를 접두사로 가지고 있는지 확인합니다.
if (!number.equals(B) && number.startsWith(B)) {
count++; // 두 조건을 모두 만족하면 개수를 1 증가시킵니다.
}
}
// 최종 개수를 출력합니다.
System.out.println(count);
br.close(); // BufferedReader 사용 후 닫아줍니다.
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.