알고리즘
[백준] 26041번 : 비슷한 전화번호 표시 - JAVA
DoosanBaek
2024. 11. 15. 14:56
나의 풀이 ->
문제 분석 :
- 주어진 문자열 A는 여러개의 전화번호를 공백으로 구분한 문자열임
- 추가적으로 하나의 전화번호 B가 주어짐
- A에 포함된 전화번호 중 B와 같지 않으면서 B를 접두사로 갖는 전화번호의 개수를 출력해야한다.
제약 조건 :
- 전화번호 개수 n ( 1<= n <= 100000 )
- 문자열 A의 길이 ( 2<= 문자열 A 길이 <= 1000000) , 공백을 포함한 모든 전화번호의 총 길이
- 전화번호 B의 길이 2<= 전화번호 길이 <= 10
- 전화번호는 문자 '1' ~ 문자 '9' 로만 이루어짐
의사 결정 :
- BufferedReader를 사용하여 입력을 받는다 ( 메모리 효율, Scanner 보다 덩어리째로 빠르게 읽음)
- 전화번호 목록은 공백으로 구분된 문자열을 split(" ") 메서드를 사용하여 배열로 변환하여 저장한다.
- 두번째 줄에서 전화번호 B를 입력받아 저장한다.
- 전화번호 배열 A를 순회하면서 각 전화번호가 B와 같지 않은지 확인한다.
- startsWith(B) 메서드를 사용하여 B를 접두사로 갖는지 확인한다.
- 두조건 만족시, 카운트 증가시킨다.
- 죄종 조건 만족하는 전화번호 개수를 출력한다.
package com.doosane.study01.week01.day3.bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ26041 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 문자열 A 입력 (전화번호 목록)
String[] A = br.readLine().split(" ");
// 비교할 전화번호 B 입력
String B = br.readLine();
int count = 0;
// 전화번호 목록 A에서 B를 접두사로 가지면서 B와 다른 전화번호 수를 셈
for (String number : A) {
if(!number.equals(B) && number.startsWith(B)) {
count++;
}
}
// 결과 출력
System.out.println(count);
}
}
/*
메모리 27288 KB
시간 276 ms
*/