2025년 01월 24일

2025. 1. 24 알고리즘 오답노트

알고리즘

1. 단어 정렬 (백준 1181번)

링크
자바스크립트에서 문자열 비교 원리를 모르고 있었다. 진짜 하루종일 삽질하고 일일히 문자열 ASCII로 비교해가면서 풀었는데, 그냥 sort() 함수 써도 문제 없다는 걸 알고 해탈했다.
먼저 단어의 길이 별로 정렬을 해놓은 객체를 만들고, 그 객체를 순회하며 문자열 배열을 정렬하여 출력하는 방식으로 풀었다.

내 답안

const fs = require("fs");

const input = fs
    .readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt")
    .toString()
    .trim()
    .split("\n");

const N = Number(input[0]);

let words = {};

for (let i = 1; i <= N; i++) {
    const word = input[i];
    const length = word.length;

    if (!words[length]) {
        words[length] = [word];
    }

    if (words[length].includes(word)) continue;

    words[length].push(word);
}

for (const [l, w] of Object.entries(words)) {
    if (w.length <= 1) {
        console.log(w[0]);
        continue;
    }

    const temp = w.sort();

    for (let i = 0; i < temp.length; i++) {
        console.log(temp[i]);
    }
}

2. 영화감독 숌 (백준 1436번)

링크
진짜.. 한숨만 나옴. 너무 꼬아서 생각하다 보니까 문제의 본질을 잊었던 것 같다.
그냥 브루트 포스 방식으로 풀면 쉽게 풀리는 데 계속 수의 규칙이나 메모리 초과 안뜨게 하려고 삽질했었다.

내 답안

const fs = require("fs");

const input = fs
    .readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt")
    .toString()
    .trim();

const N = Number(input);
let number = 0;
let count = 0;

while (true) {
    number += 1;
    if (number.toString().includes("666")) {
        count += 1;
    }

    if (count === N) break;
}

console.log(number);