본문 바로가기

Algorithm/Baekjoon55

백준 2941번 백준 2941번을 풀어보았다. 이 문제의 핵심은 문자열 대체이다. 특정 문자열이 존재하는지 확인하고, 존재할 경우 * 등으로 대체한다. 이후 전체 문자열의 길이를 출력한다. 크게 다음의 4가지 풀이로 정리해보았다.split().join() 사용replace 메소드 사용replaceAll 메소드 사용정규표현식 사용 split().join() 사용let word = require('fs').readFileSync('/dev/stdin').toString().trim()const croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']for (const c of croatia) { word = word.split(c).join('*')}console.log(.. 2025. 2. 14.
백준 24313번 백준 24313번을 풀어보았다. 먼저 O(n) 정의를 만족하는 부등식은 n≥n0에 대해 a1*n+a0≤c*n이고 정리하면 a0≤(c-a1)*n이다. 따라서 자연스럽게 c와 a1의 대소를 고려해보게 되는데, a1>c일 경우 a0이 무엇이든, n이 무한에 가까워지며 언젠가는 부등식을 성립하지 못하게 된다. 즉, a1>c일 경우 0을 출력하고 그 외의 경우 a1*n0+a0≤c*n0을 성립하면 1을, 아니면 0을 출력하면 된다.let [[a1, a0], [c], [n0]] = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((value) => value.split(' ').map(Number))if (a1 > c) { console.lo.. 2025. 2. 12.
백준 24267번 백준 24267번을 풀어보았다. 앞서 풀어본 24262~24266번과 유사하지만 수행 횟수를 구하는 데 보다 수학적인 사고를 요한다. 먼저 정답 풀이는 아래와 같다.let n = BigInt(require('fs').readFileSync('/dev/stdin').toString())console.log((n*(n-1n)*(n-2n)/6n).toString())console.log(3) 수행 횟수를 구하는 방법은 크게 3가지로 정리해보았다. 1. 문제 상황 그대로 식 세우기 문제 상황 그대로 식을 세워보면 아래와 같다.이를 n에 대해 정리하여 수행 횟수를 구할 수 있다.  2. 나열해보며 규칙 발견하기 주어진 범위 내에서 직접 나열해보며 규칙을 발견해보면 아래와 같다.마지막 시그마를 n에 대해 정리하여 .. 2025. 2. 12.
백준 24266번 백준 24266번을 풀어보았다. 처음에는 동일한 유형인 24262번~24265번과 유사할 거라 생각하여 큰 고민 없이 풀이하였다.let n = Number(require('fs').readFileSync('/dev/stdin').toString()) console.log(n**3)console.log(3) 당연히 정답일 줄 알았는데 틀렸습니다가 출력되었다. 알고보니 1≤n ≤500,000의 범위에서 n^2까지는 number 자료형이 표현할 수 있지만 n^3은 number 자료형이 표현할 수 있는 범위를 넘어서는 것이었다. JavaScript에서 자주 사용되는 숫자 자료형으로는 number와 bigint가 있다. number JavaScript의 기본적인 숫자 자료형으로 정수와 부동소수점을 모두 포함한다... 2025. 2. 1.
백준 1157번 백준 1157번을 풀어보았다. 아주 다양한 풀이가 존재하는 문제이지만 세 가지 풀이만 정리해보았다. 나중에 복습할 때 다른 풀이들까지 공부해보기로 하고.. 1. 배열을 이용한 풀이let words = require('fs').readFileSync('/dev/stdin').toString().trim().toUpperCase()let alphabet = Array(26).fill(0)for (const word of words) { const index = word.charCodeAt() alphabet[index-65]++}const max_count = Math.max(...alphabet)const max_alphabet = alphabet.filter((value) => value === ma.. 2025. 1. 23.
백준 11653번 백준 11653번을 풀어보았다. 첫번째 풀이는 시간초과가 발생하였다.let N = Number(require('fs').readFileSync('/dev/stdin').toString())let primeFactor = 2, output = ''while (true) { while (N % primeFactor === 0) { N /= primeFactor output += `${primeFactor}\n` } if (N === 1) break let isPrimeNumber = false while (!isPrimeNumber) { primeFactor += 1 for (let i = 2; i  먼저 나머지가 0이 될 때까지 N을 primeFactor로 나누고 (N에서 하.. 2025. 1. 22.