코딩테스트

[백준] 나는 친구가 적다 (Small) (JS)

여유로운 프론트엔드 개발자 2025. 2. 8. 21:14

문제

https://www.acmicpc.net/problem/16171

친구가 적은 성민이는 수업에 결석해도 시험이나 과제에 대한 정보를 제대로 얻을 수 없었다. F 학점을 받을 위기까지 아슬아슬하게 결석일 수를 유지하던 성민이는, 어느 날 갑자기 영문도 모른 채 쪽지시험을 보게 되었다!

갑작스러운 쪽지 시험으로 마음이 급해진 성민이는 매직아이를 사용해 벼락치기를 하기로 한다.

성민이가 듣는 과목의 교과서는, 알파벳 소문자(a-z)와 알파벳 대문자(A-Z)로만 이루어져 있다. 성민이가 교과서에서 찾고자 하는 키워드도 역시 알파벳 소문자와 대문자로만 이루어져 있다. 하지만, 성민이에겐 큰 문제가 생겼다. 결석한 날의 수업 내용을 친구에게 빌려 필기를 하던 중, 교과서에 숫자(0-9)를 적어버린 것이다.

키워드를 찾기 힘들어 패닉에 빠진 성민이는 몇 안 되는 친구인 당신에게 도움을 요청했다. 성민이를 도와, 교과서에서 성민이가 찾고자 하는 키워드의 존재 여부를 알려주자.

입력

첫 번째 줄에는 알파벳 소문자, 대문자, 숫자로 이루어진 문자열 S가 주어진다. (1 ≤ |S| ≤ 100) 두 번째 줄에는 성민이가 찾고자 하는 알파벳 소문자, 대문자로만 이루어진 키워드 문자열 K가 주어진다. (1 ≤ |K| ≤ 100).

단, 입력으로 들어오는 키워드 문자열 K의 길이는, 교과서의 문자열 S보다 짧거나 같다.

출력

첫 번째 줄에 성민이가 찾고자 하는 키워드가 문자열 내에 존재하면 1, 존재하지 않으면 0을 출력한다.

풀이

1. 배열 비구조화 할당을 통해 str과 search에 input의 0번째, 1번째 요소를 할당한다.

2. 정규표현식을 사용하여 str에서숫자를 제거한 문자열을 excepetNumStr에 할당한다.

3. excepetNumStr에서 찾고자 하는 키워드가 있으면 1 없으면 0을 출력한다.

const fs = require("fs");
const input = fs
  .readFileSync("./dev/stdin")
  .toString()
  .trim()
  .split("\n")

Solution = (input) => {
    const [str, search] = input;
    const exceptNumStr = str.replace(/[0-9]/g, "");

    console.log(exceptNumStr.includes(search) ? 1 : 0);
}

Solution(input);

결론

비구조화 할당, 정규표현식, includes 메서드를 사용하여 불필요한 연산 없이 빠르게 정답을 구하였다.