백준 비슷한 전화번호 표시

KIMYEONGJUN·2026년 1월 7일
post-thumbnail

문제

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

첫 번째 줄에 문자열 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 사용 후 닫아줍니다.
    }
}

마무리

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

profile
Junior backend developer

0개의 댓글